在正常情况下,我们是通过RGB_LED来指示时间。但在测试阶段及初次启动计时器时,对串行通信功能的需求是不可或缺的。 要想正确使用串行通信功能,离不开下面几件事,即串行通信的波特率设置、串行收发功能的实现及数据格式的变换。这些功能的保障靠的是串行通信初始化函数init_serialcom()、 串口字符发送函数send_char_com()、 字符串发送函数send_string_com()、中断接收函数serial ()及相应的主函数。 相关的函数程序如下: - //串行通信初始化函数
- void init_serialcom( void )
- {
- SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
- TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
- PCON |= 0x80 ; //SMOD=1;
- TH1 = 0xFA ; //Baud:9600 fosc=11.0592MHz
- IE |= 0x90 ; //Enable Serial Interrupt
- TR1 = 1 ; // timer 1 run
- TI=1;
- }
- //向串口发送一个字符
- void send_char_com( unsigned char ch)
- {
- SBUF=ch;
- while (TI== 0);
- TI= 0 ;
- }
- //向串口发送一个字符串,strlen为该字符串长度
- void send_string_com( unsigned char *str, unsigned int strlen)
- {
- unsigned int k= 0 ;
- do { send_char_com(*(str + k)); k++; }
- while (k < strlen);
- }
- // 串口接收中断函数
- void serial () interrupt 4 using 3
- {
- if (RI)
- {
- RI = 0 ;
- ch=SBUF; //CHi
- read_flag= 1 ; //就置位取数标志
- }
- }
- //串行收发测试主函数
- main()
- {
- init_serialcom(); //初始化串口
- while ( 1 )
- {
- if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
- {
- read_flag= 0 ; //取数标志清0
- send_char_com(ch);
- }
- }
- }
复制代码下一贴我们将介绍串行收发过程中所涉及的数据格式转换处理。
|