TMD樓上的越來越厲害,感覺吊燈都快被震下來了
用到的特殊寄存器:
SM0 SM1:工作方式控制 01 工作方式1 1起始位 8數據位 1停止位 波特率可變
TI:發送中斷位 TI=1 發送完成,軟件置0
RI:接收中斷位 RI=1 接收完成,軟件置0
REN:接收使能
SBUF:緩沖區
PCON最高位SMOD 置1 波特率加倍,0正常
定時器使用模式2 ,10 8位自動增補
代碼如下: #include <reg52.h> typedef unsigned char uint8; typedef unsigned int uint16; sbit left=P1^2; uint8 message; void delay42ms(void) //誤差 -0.217013888898us { unsigned char a,b,c; for(c=118;c>0;c--) for(b=65;b>0;b--) for(a=1;a>0;a--); } void uart_init() { TMOD=0x20; //定時器模式2 自動增補 SCON=0x50; //uart方式1 8位 TH1=TL1=0xfd; //9600 th= 256-11059200/(12*32*9600) PCON=0x80; //加倍 19200 TR1=1; REN=1; ES=1; EA=1; } main() { uart_init(); left=0; while(1); } void uart_interrupt() interrupt 4 { if(TI) { TI=0; } if(RI) { RI=0; message=SBUF; REN=0; //接收關閉 if(message=='a') { left=1; delay42ms(); left=0; } if(message=='c') { SBUF='o'; while(TI==0); TI=0; SBUF='k'; while(TI==0); TI=0; SBUF='!'; } REN=1; } } 效果演示: