上位机和下位机通信的程序
单片机源程序如下:
- #include <c8051f020.h>
- #define SYSCLK 22118400 // 系统时钟频率22.1184MHz
- #define BAUDRATE 115200 // BAUDRATE
- #define TIMER2_RELOAD 0x0000
- sfr16 RCAP2 = 0xCA; // Timer2 Reload Register
- sfr16 TMR2 = 0xCC; // Timer2 Register
- /*******************
- 振荡器初始化
- ********************/
- void OSCILLATOR_Init (void)
- {
- int i; /*延时计数器*/
- OSCXCN = 0x67; /*打开外部晶体振荡器*/
- for (i=0; i < 256; i++) ; /*延时,等待振荡器启动(>1ms)*/
- while (!(OSCXCN & 0x80)) ; /*查询外部晶体是否稳定起振*/
- OSCICN = 0x88; /*用外部晶体作为系统时钟,并使能时钟丢失检测*/
- }
- /**************************************
- 端口的初始化
- ***************************************/
- void PORT_Init()
- {
- XBR0 = 0x04; //使能UART0EN(XBAR0.2),p0.0=TX0,p0.1=RX0
- XBR2 = 0x40; //XBARE置1
- }
- //-----------------------------------------------------------------------------
- // UART0_Init
- //-----------------------------------------------------------------------------
- //
- // Return Value : None
- // Parameters : None
- //
- // Configure the UART1 using Timer1, for <baudrate> and 8-N-1.
- //
- //-----------------------------------------------------------------------------
- void UART0_Init (void)
- {
- SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
- TMOD = 0x21; // TMOD: timer 1, mode 2, 8-bit reload
- TH1 = -(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate
- TR1 = 1; // start Timer1
- CKCON |= 0x10; // Timer1 uses SYSCLK as time base
- PCON |= 0x90; // SMOD00 = 1
- //TI0 = 1; // Indicate TX0 ready
- }
- void UART1_Init (void)
- {
- SCON1=0x50;
- T4CON=0x34;
- CKCON |= 0x50;
- PCON |= 0x90;
- TH4=0XFF;
- TL4=0XFA;
- RCAP4L=0XFA;
- RCAP4H=0XFF;
- }
- /*
- T0初始化
- */
- void T1_initial(void)
- {
- TMOD=0x21;
- //CKCON |= 0x08;
- //TH0=0x70;
- //TL0=0x00;
- TH0=0x70;
- TL0=0x00;
- TR0=1;
- }
- /*
- T2初始化
- */
- void T2_initial(void)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
程序.rar
(94.64 KB, 下载次数: 35)
|