小弟今天第一次模拟串口,程序如下:其实就是第8.1章的例程,但是我将其下载下去后,串口输入0x55后 没有输出。我在STC-ISP中设置也是设置的11.0592MHz,波特率9600,为什么没有呢?
#include "reg51.h" typedef unsigned char BYTE; typedef unsigned WORD; typedef bit BOOL; #define BAUD 0xFE80 /* 9600bps@11.0592MHz */ sfr AUXR = 0x8E; sbit RXB = P3^0; /* 定义串口TX RX端口 */ sbit TXB = P3^1;
BYTE TBUF,RBUF; BYTE TDAT,RDAT; BYTE TCNT,RCNT; BYTE TBIT,RBIT; BOOL TING,RING; BOOL TEND,REND;
BYTE t,r; BYTE buf[16];
void UART_INIT() { TING = 0; RING = 0; TEND = 1; REND = 0; TCNT = 0; RCNT = 0; } void main() { TMOD = 0x00; /* 定时器0 16位自动装置模式 */ AUXR = 0x80; /* 定时器0工作在1T模式 */ TL0 = BAUD; TH0 = BAUD >> 8; /* 初始化定时器0,并设置自动装置的值 */ TR0 = 1; /* 定时器0开始启动 */ ET0 = 1; /* 使能定时器0中断 */ PT0 = 1; /* 设置定时器0中断优先级 */ EA = 1; /* 开全局中断 */ UART_INIT(); /* 串口初始化 */ while(1) {
if(REND) { REND = 0; buf[r++ & 0x0f] = RBUF; } if(TEND) { if(t != r) { TEND = 0; TBUF = buf[t++ & 0x0f]; TING = 1; } }
} }
void tm0() interrupt 1 using 1 { if(RING) { if(--RCNT == 0) { RCNT =3; if(--RBIT == 0) { RBUF = RDAT; RING = 0; REND = 1; } else { RDAT >>=1; if(RXB)RDAT |= 0x80; } } } else if(!RXB) { RING = 1; RCNT = 4; RBIT = 9; } if(--TCNT == 0) { TCNT = 3; if(TING) { if(TBIT == 0) { TXB = 0; TDAT = TBUF; TBIT = 9; } else { TDAT >>= 1; if(--TBIT ==0) { TXB = 1; TING = 0; TEND = 1; } else { TXB =CY; } } }
} }
|