STC12C5A60S2-雙串口使用程序_第1頁
STC12C5A60S2-雙串口使用程序_第2頁
STC12C5A60S2-雙串口使用程序_第3頁
STC12C5A60S2-雙串口使用程序_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、STC12C5A60S2 雙串口使用程序(已經(jīng)驗證成功)#include #include intrins.h#define uchar unsigned char#define S2RI 0x01 / 串口2接收中斷請求標(biāo)志位#define S2TI 0x02 / 串口2發(fā)送中斷請求標(biāo)志位/=/ 對于將P4.4、P4.5當(dāng)做I/O口使用必須添加的定義|/=sfr p4sw=0xbb; / 需在主函數(shù)文件中做相應(yīng)設(shè)置4、5、6為1(作為I/O口使用)/*sbit button1=P43;sbit button2=P44;sbit button3=P45;sbit button4=P46;*/u

2、char code temp1= 白云:“我可是個名人” ;uchar code temp2= 黑土:“啥名人啊,你就是個人名” ;uchar code temp3= 小崔:“誒,大叔大媽,你倆都冷靜冷靜” ;uchar code temp4= 觀眾:“哈哈哈哈” ;/*void delay_1ms(uchar ii) / 誤差 -0.1us unsigned char a,b;for(; ii0; ii-) for( b = 18; b0; b-) for( a = 152; a0; a-); _nop_(); /if Keil,require use intrins.h void dela

3、y1s(void) /誤差 -0.5us unsigned char a,b,c; for( c = 212; c0; c-) for( b = 160; b0; b-) for( a = 80; a0; a-); _nop_(); /if Keil,require use intrins.h _nop_(); /if Keil,require use intrins.h*/* 串口通信部分 *uchar wj_uun = !; / 用于存放串口1接收的字符uchar wj_uun2 = ?; / 用于存放串口2接收的字符void bt_uart_init() / 單片機雙串口初始化/SCON

4、=0X50; / SM0=0 SM1=1 SM2=0 REN=1SM0 = 0; / 串口工作方式1:1位起始位,8位數(shù)據(jù)位,1位停止位允許串口接收SM1 = 1;REN = 1; / 允許串口接收/RI=1; / 接收標(biāo)志位,0:正在接收 1:接收完畢 (如果RI=1就一直執(zhí)行串口中斷)TMOD = 0X20; / 定時器T1工作方式2TH1 = 0XFD; / 9600bit/s下的定時器初值TL1 = 0XFD;TR1 = 1; / 啟動定時器T1EA = 1; / 開總中斷ES = 1; / 開串行口中斷S2CON = 0x50; / 串口2工作在方式1 10位異步收發(fā) S2SM0=0

5、 S2SM1=1 S2REN=1允許接收BRT = 0XFD; / 9600bit/s下的獨立波特率發(fā)生器初值A(chǔ)UXR = 0x10; / 輔助寄存器:0001 0000 -BRTR=1:獨立波特率發(fā)生器開始計數(shù),S2SMOD=0:波特率不加倍,BRTx12=0:獨立波特率每12個時鐘計數(shù)一次IE2 = 0x01; / 開串口2中斷 0000 0001-ES2=1/AUXR1 = 0x10; / 0001 0000-S2_P4=1:UART2從P1口(RxD2:P1.2 TxD2:P1.3)切換到P4口(RxD2:P4.2 TxD2:P4.3) 否則默認(rèn)都為P1口/* 串口1發(fā)送函數(shù) */vo

6、id s1_send_char(uchar dat) / 發(fā)送端(發(fā)送的是字符)SBUF = dat; / 將字符送入發(fā)送緩沖寄存器while(!TI); / TI為發(fā)送狀態(tài)標(biāo)志位,0:發(fā)送中 1:發(fā)送結(jié)束TI = 0; / 手動清零標(biāo)志位void s1_send_string(uchar *pt) / 通過調(diào)用發(fā)送字符函數(shù)來發(fā)送字符數(shù)組while(*pt != 0)s1_send_char(*pt+);/* 串口2發(fā)送函數(shù) */void s2_send_char(uchar dat2) / 發(fā)送端(發(fā)送的是字符)S2BUF = dat2; / 將字符送入串口2的發(fā)送緩沖寄存器while(!(

7、S2CON&S2TI); / 判斷發(fā)送是否結(jié)束:S2CON.bit2 = 0:發(fā)送中 1:發(fā)送結(jié)束S2CON &= S2TI; / 手動清零標(biāo)志位,令S2CON.bit2 = 0void s2_send_string(uchar *pt2) / 通過調(diào)用發(fā)送字符函數(shù)來發(fā)送字符數(shù)組while(*pt2!=0)s2_send_char(*pt2+);/* 串口1中斷程序 */void bt_serial_1()interrupt 4 / 中斷編號4為串行口1中斷if(RI) / 接收標(biāo)志位,0:正在接收 1:接收完畢 (如果RI=1就一直執(zhí)行中斷)RI = 0; / 同樣需要手動清零wj_uun

8、= SBUF; / 將接收緩沖器接收的字符送入變量中/* 串口2中斷程序 */void bt_serial_2()interrupt 8 / 中斷編號8為串行口2中斷if(S2CON&S2RI) / 接收標(biāo)志位: S2CON.bit1 = 0:正在接收 1:接收完畢 (如果RI=1就一直執(zhí)行中斷)S2CON &= S2RI; / 同樣需要手動清零,令S2CON.bit1 = 0wj_uun2 = S2BUF; / 將串口2接收到的字符送入變量中void main(void)bt_uart_init(); / 串口初始化p4sw = 0x70; / 0111 0000 對應(yīng)的4、5、6腳設(shè)置成功通用I/O口while(1)/*if(w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論