基于C8051F410的串口通信实验
来源:互联网 发布:c语言fclose 编辑:程序博客网 时间:2024/05/20 14:19
这段程序功能很简单,就是按一个按键就发送特定命令,收到命令就控制灯的亮灭,
但却很有调试价值,曾帮科协的一个同学调通了C8051F410和avr的通信,还有自己
的一些项目用到它。故上传上来给大家参考下。
#include <c8051f410.h> // SFR declarations#include <stdio.h>#define SYSCLK 24500000 // Internal oscillator frequency in Hz#define BAUDRATE 2400 // Baud rate of UART in bpssbit led1 = P2^1;sbit led2 = P2^3;sbit key1 = P1^4;sbit key2 = P1^5;void OSCILLATOR_Init (void);void PORT_Init (void);void UART0_Init (void);void uart_send(unsigned char m);void delay(unsigned int m);void delay_ms(unsigned int n);void main (void) { PCA0MD &= ~0x40; // Disable Watchdog timer OSCILLATOR_Init (); // Initialize oscillator PORT_Init (); // Initialize crossbar and portsUART0_Init(); EA = 1; // Enable global interrupts while(1) {if( key1 != 1){delay_ms(500);uart_send(0xb0);key1=1;}if( key2 !=1){delay_ms(500);uart_send(0xb1);key2=1;}} // Wait for interrupt} void OSCILLATOR_Init (void){ OSCICN = 0x87; // Set clock to 24.5 MHz RSTSRC = 0x04; // Enable missing clock detector}void PORT_Init (void){ //P0MDIN = 0xFC; // Configure P0.0 and P0.1 to analog P0MDOUT |= 0x10; // Enable UTX as push-pull output P0SKIP = 0x03; // Skip P0.0 and P0.1 on the crossbar P1MDIN |= 0x30;P1MDOUT &= ~0x30;P1SKIP = 0x30;P2MDIN=0xFF;P2MDOUT = 0x0a;P2SKIP=0x0a; XBR0 = 0x01; // Enable UART on P0.4(TX) and P0.5(RX) XBR1 = 0x40; // Enable crossbar and weak pull-ups}void UART0_Init (void){ SCON0 = 0x10; // SCON0: 8-bit variable bit rate // level of STOP bit is ignored // RX enabled // ninth bits are zeros // clear RI0 and TI0 bits if (SYSCLK/BAUDRATE/2/256 < 1) { TH1 = -(SYSCLK/BAUDRATE/2); CKCON |= 0x08; // T1M = 1; SCA1:0 = xx } else if (SYSCLK/BAUDRATE/2/256 < 4) { TH1 = -(SYSCLK/BAUDRATE/2/4); CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01 CKCON |= 0x01; } else if (SYSCLK/BAUDRATE/2/256 < 12) { TH1 = -(SYSCLK/BAUDRATE/2/12); CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00 } else if (SYSCLK/BAUDRATE/2/256 < 48) { TH1 = -(SYSCLK/BAUDRATE/2/48); CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10 CKCON |= 0x02; } else { while (1); // Error. Unsupported baud rate } TL1 = TH1; // init Timer1 TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload TMOD |= 0x20; TR1 = 1; // START Timer1 IP |= 0x10; // Make UART high priority ES0 = 1; // Enable UART0 interrupts}void UART0_Interrupt (void) interrupt 4{ unsigned char Byte;if (RI0 == 1) { RI0 = 0; // Clear interrupt flag Byte = SBUF0; // Read a character from UARTswitch(Byte){case 0xb0:led1 = 1;led2 = 0;break;case 0xb1:led1 = 0;led2 = 1;break;default:break;}}if (TI0 == 1) // Check if transmit flag is set {TI0 = 0; // Clear interrupt flag } }void uart_send(unsigned char m){while(TI0==1);SBUF0=m;}void delay_ms(unsigned int m){while(m--)delay(2046);}void delay(unsigned int m){while(m--);}
- 基于C8051F410的串口通信实验
- 基于C8051F410的波形发生器设计
- 基于C8051F410的矩阵键盘设计
- 基于FPGA Uart串口通信实验
- 基于串口的TCP通信
- 基于fl2440的串口通信
- 基于FPGA的串口通信
- 基于MFC的串口通信
- 基于Java的串口通信
- 基于MFC的串口通信
- 基于C8051F410的am2305温湿度传感器的驱动编写
- 基于C8051F410的DHT11温湿度传感器驱动编写
- ARM开发(5)基于STM32的UART串口通信实验
- 基于AT89C52和串口通信助手的串口通信
- 单片机串口通信实验
- 串口通信实验
- 串口通信实验
- 基于S5PV210的串口通信的实战
- 天气预报之二(学习SAX解析)
- 泛型列表
- LCD一些参数设置
- 泛型C#
- smarty模版介绍
- 基于C8051F410的串口通信实验
- 如何使用arm-eabi-gdb调试android c/c++程序
- Oracle中的数据字典技术及常用数据字典总结
- ALSA 驱动框架和驱动开发 (二)
- 利用 JSP 2 提供的 SimpleTagSupport 开发自定义标签
- Jsp自定义标签01
- Oracle10.2.0.1 For CentOS6.0 安装文档(一)
- 字节输入流类InputStream
- ASP.NET MVC 音乐商店 - 3. 视图与模型