uart通信原理与程序.docVIP

  • 17
  • 0
  • 约1.92千字
  • 约 2页
  • 2017-06-08 发布于重庆
  • 举报
uart通信原理与程序

关于UART数据读取的知识点:CPU读取RXD数据时,采样 读取数据 速度为波特率的16倍。在第7、8、9计数状态时,采样此时的RXD数值,取值为三个采样值的多数 即至少2次 作为读取的数值。 对于起始位来说,下跳沿开始读数,但会通过7、8、9的采样来确定这个数是不是0,如果不是,则复位接收电路. #include typedef unsigned char uint8; typedef unsigned int uint16; void send_bit uint8 i if i ! 0 TXD 1; else TXD 0; TR0 1; while !TF0 ; TR0 0; TH0 0xff; TL0 0xBD; TF0 0; main uint8 a 0xE4; uint8 i; uint16 j; TMOD| 0x01; // 1/9600 65536-x *12特率是9600表示发送一位的时间是1/9600秒 TH0 0xff; TL0 0xBD;//经过调整的值 TXD 1; while 1 TF0 0; send_bit 0 ; for i 0;i 8;i++ send_bit a0x01 ; a a 1; send_bit 1 ; for j 0;j 50000;j++ ; a 0xE4; 工作方式2特别适合于用作较精确的脉冲信号发生器。自动重装初值 低8位自动装高8位的值 T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。 #include typedef unsigned char uint8; typedef unsigned int uint16; sbit RXD2 P3^0; sbit TXD2 P3^1; #define MCLK L #define BAUD_RATE 9600UL #define WAIT_TIME do while !TF0 ;TF0 0; while 0 /* * 定时器初始化 */ void timer0_init void TMOD 0xF0; TMOD | 0x02; //计数器0,方式2 TH0 256 - MCLK/ 12*BAUD_RATE ; TL0 TH0; TF0 0; TR0 0; /* * UART发送 */ void UART_send_byte uint8 dat uint8 len 8; // 1. start bit TL0 TH0; TR0 1; TXD2 0; WAIT_TIME ; // 2. DAT_LEN bit data while len-- TXD2 bit dat 0x01 ; //先发送低位 WAIT_TIME ; dat dat 1; // 3. stop bit TXD2 1; WAIT_TIME ; TR0 0; /* * UART接收 */ uint8 UART_rev_byte void uint8 len 8, dat 0; while RXD2 ; // 1. jump start bit TR0 1; TL0 256 - MCLK/ 12*BAUD_RATE /2; WAIT_TIME ; WAIT_TIME ; // 2. receive DAT_LEN bit data while len-- dat 1; if RXD2 dat | 0x80; WAIT_TIME ; // 3. wait stop bit WAIT_TIME ; TR0 0; return dat; main uint8 a; timer0_init ; while 1 UART_send_byte i ; UART_send_byte n ; UART_send_byte p ; UART_send_byte u ; UART_send_byte t ; UART_send_byte : ; a UART_rev_byte ; UART_send_byte a ; UART_send_byte \r ; UART_send_byte \n ;

文档评论(0)

1亿VIP精品文档

相关文档