久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
求指教 stc12c5a60s2雙串口單片機第二串口通訊問題
[打印本頁]
作者:
西瓜易冷
時間:
2017-4-10 20:14
標題:
求指教 stc12c5a60s2雙串口單片機第二串口通訊問題
本人以前學的一直是at89c51型單片機 現在學校里做一個甲醛檢測儀 原來的串口用于傳感器傳送數據 因為要做一個RS232和上位機通信 所以選用了 stc12c5a60s2雙串口單片機 。。無奈啊 第二個串口死活弄不通
問題大概是這樣的 不用串口二初始化 不用串口二發送數據的時候好好的 單把串口二初始化程序添加進去并傳送數據后 串口一串口二都不工作了 也顯示不出檢測數據了。。想問問有沒有大神會改 幫忙弄一下串口二的初始化程序和發送程序
PS 串口二只用發送 不用接受 波特率都是9600 晶振都是11.0592
作者:
西瓜易冷
時間:
2017-4-10 20:15
#include <12c5a60s2.h>
#include <intrins.h>
#include<absacc.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define busy 0x80
uint jiaquan_mg,jiaquan_ppm;
uchar NRxBuff; //通訊接收緩沖區記數
uchar inbuff[20];//通訊接收緩沖區數據
uchar outbuff[20];//通訊發射緩沖區數據
sbit RS=P3^3;
sbit RW=P3^4;
sbit E=P3^5;
//毫秒延時子程序
void delay_nms(uint n)
{uint i,j;
for (i=0;i<n;i++){for(j=0;j<1900 ;j++);}}
//串口1 初始化
void UartInit(void) //9600bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位數據,可變波特率
AUXR=AUXR&0x5a;
TMOD &= 0x0f; //清除定時器1模式位
TMOD |= 0x20; //設定定時器1為8位自動重裝方式
TL1 = 0xFA; //設定定時初值
TH1 = 0xFA; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
}
//串口2 初始化
void Uart_two_init (void)
{
S2CON=0x50;
BRT=0xfd;
AUXR1=AUXR1&0xef;
IE2=IE2|0x01;
}
// 串口2 發送一個字符
void uart_two_send(uchar l)
{
ES2=0;
S2BUF=l;
while((S2CON&0x02)!=0x02);
S2CON&=~0x02;
ES=1;
}
//串口2 發送數據
void uart_two_printf(uchar *p)
{
uchar b;
for(b=0;b<=7;b++)
{
uart_two_send(p[b]);
}
}
/////串口1中斷子程序//////
serial (void) interrupt 4
{
RI=0;
inbuff[NRxBuff]=SBUF;
NRxBuff++;
if (NRxBuff>15)NRxBuff=0;
}
//串口1輸出子程序
void sprint(uchar a)
{
ES=0;
SBUF=a;
while(!TI)
{};
TI=0;
ES=1;
}
//發送讀取指令
void fa_read_pro(void)
{
uchar a;
outbuff[0]=0xa5;
outbuff[1]=0x5a;
outbuff[2]=0x02;
outbuff[3]=0x80;
outbuff[4]=0xaa;
for (a=0;a<5;a++)sprint(outbuff[a]);
}
// 1602的顯示程序這里省略了
// 主程序 //
void main(void)
{
uint mg1,mg2,mg3,ppm1,ppm2,ppm3;
uchar *s1;
uchar *s2;
uchar *s3;
uchar s4;
init_1602();
s1="HCHO:";
s2="mg/m3";
s3="ppm";
s4='.';
display_1602string(0,0,s1); // 第一行開頭顯示 HCHO:
display_1602string(0,1,s1); // 第二行開頭顯示 HCHO:
display_1602string(11,0,s2); // 第一行末尾顯示 mg/m3
display_1602string(13,1,s3); // 第二行末尾顯示 ppm
EA=0;
delay_nms(50); //
NRxBuff=0;
UartInit(); //串口1 初始化
Uart_two_init(); // 串口2 初始化
EA=1;
delay_nms(166); //
while(1)
{
fa_read_pro();////發送讀取指令
delay_nms(100);//延時一段時間,大于50ms
if ((NRxBuff>=8)&&(inbuff[0]==0xA5)&&(inbuff[1]==0x5A)&&(inbuff[3]==0x80)) //如果收到8個字節的數據,進行判斷,然后處理數據。
{
jiaquan_mg=inbuff[4]*256+inbuff[5];////////////計算甲醛mg值
jiaquan_ppm=inbuff[6]*256+inbuff[7];//////////計算甲醛ppm值
NRxBuff=0;
}
// 想在這個位置 把從串口一接收到的8個字節數據通過RS232從串口二傳送出去 串口二只用于傳送 不用接受
mg1=jiaquan_mg/100; //計算各位
mg2=jiaquan_mg%100/10; //計算十分位
mg3=jiaquan_mg%100%10; //計算千分位
ppm1=jiaquan_ppm/100;
ppm2=jiaquan_ppm%100/10;
ppm3=jiaquan_ppm%100%10;
display_1602char(7,0,s4); //顯示小數點
display_1602char(7,1,s4);
display_1602int(6,0,0x30+mg1); //顯示動態數字要加 0x30 顯示以mg為單位的檢測數值
display_1602int(8,0,0x30+mg2);
display_1602int(9,0,0x30+mg3);
display_1602int(6,1,0x30+ppm1); //顯示動態數字要加 0x30 顯示以ppm為單位的檢測數值
display_1602int(8,1,0x30+ppm2);
display_1602int(9,1,0x30+ppm3);
delay_nms(166);
}
}
復制代碼
作者:
nephty
時間:
2018-5-1 14:26
老哥,調出來了嗎,能講講嗎
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
免费视频二区
|
欧美视频一区二区三区
|
亚洲九色
|
毛片一级片
|
国产欧美精品区一区二区三区
|
久久精品国产一区二区三区
|
日韩精品a在线观看图片
|
综合久久亚洲
|
久久久亚洲精品视频
|
久久99精品久久久久久国产越南
|
国产在线拍偷自揄拍视频
|
日韩欧美成人精品
|
97精品国产
|
国产一级片网站
|
国产精品久久毛片av大全日韩
|
国产欧美精品一区
|
国产偷久久一级精品60部
|
中文字幕一区二区三区四区五区
|
亚洲成人中文字幕
|
国产在线观看一区二区三区
|
久久精品小视频
|
日韩在线精品视频
|
久久一
|
羞羞涩涩在线观看
|
一区二区三区在线 | 欧
|
欧美日韩视频
|
在线一区二区三区
|
日本精品久久
|
一区二区三区国产精品
|
一色桃子av一区二区
|
久久草在线视频
|
精国产品一区二区三区四季综
|
日韩精品在线免费
|
午夜在线免费观看
|
毛片免费看
|
亚洲午夜在线
|
亚洲狠狠爱
|
91亚洲精选
|
7777在线视频
|
波多野结衣在线观看一区二区三区
|
久久免费看
|