?? serial.c
字號(hào):
// 題目:串口初始化C代碼
// 要求:
// 1.波特率1200bps,無(wú)奇偶校驗(yàn),停止位1,數(shù)據(jù)位8
// 2.定時(shí)器T1做波特率發(fā)生器
// 軟件模擬測(cè)試說(shuō)明:
// 1.這個(gè)測(cè)試采用查詢(xún)方式進(jìn)行串口通訊
// 2.將軟件仿真環(huán)境的晶震設(shè)為11.0592 MHz
// 3.軟件模擬全速運(yùn)行, 觀察波特率是1200bps
// 4.在串口1中輸入數(shù)字或字母,可觀察到通訊是否有誤。
//#pragma src
#include <reg51.h>
//串口初始化
void serial_init(void)
{
//ET1 = 0; //CLR 0ABH ;禁止T1中斷
TMOD = 0x20; //MOV 89H,#20H ;timer 1 mode 2: 8-Bit reload(定時(shí)器T1 模式2: 8位自動(dòng)初值重裝)
TH1 = 0xE8; //MOV 8DH,#0E8H
TL1 = 0xE8; //MOV 8BH,#0E8H ;1200bps, 11.059
TR1 = 1; //SETB 8EH ;啟動(dòng)定時(shí)器1
SCON = 0x50; // mode 1: 10-bit UART, enable receiver(模式1: 10位異步發(fā)送/接收, 使能接收允許位)
//SM1 = 1; // ;串行口 模式1
//SM0 = 0;
//REN = 1; // ;允許串行中斷接收
SM2 = 1; //SETB O9DH ;收到有效的停止位時(shí)才將RI置1
ES = 1; //SETB 0ACH ;允許串行中斷
EA = 1; //SETB 0AFH ;總中斷開(kāi)
}
//中斷方式處理串口數(shù)據(jù)
void serial(void) interrupt 4 using 1
{
if(RI)
{
// RI = 0;
// 串口接收, 采用臨時(shí)緩沖
}
#if 0
if(TI)
{
// TI = 0;
// 串口發(fā)送, 沒(méi)有必要使用中斷方式
}
#endif
}
// 查詢(xún)方式接收串口數(shù)據(jù)
unsigned char getchar(void)
{
while(!RI);// 沒(méi)有收到串口數(shù)據(jù)則一直等待
RI=0;
return SBUF;
}
// 查詢(xún)方式發(fā)送串口數(shù)據(jù)
void putchar(unsigned char ch)
{
SBUF=ch;
while(!TI);
TI=0;
}
code unsigned char HEX_TAB []="0123456789ABCDEF";
void puthex(unsigned char ch)
{
unsigned char i,j;
i=ch>>4;
j=ch&0x0f;
putchar(HEX_TAB[i]);
putchar(HEX_TAB[j]);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -