C8051F020UART0收发一组字符.docx

上传人:scccc 文档编号:13603701 上传时间:2022-01-20 格式:DOCX 页数:13 大小:19.31KB
返回 下载 相关 举报
C8051F020UART0收发一组字符.docx_第1页
第1页 / 共13页
C8051F020UART0收发一组字符.docx_第2页
第2页 / 共13页
C8051F020UART0收发一组字符.docx_第3页
第3页 / 共13页
C8051F020UART0收发一组字符.docx_第4页
第4页 / 共13页
C8051F020UART0收发一组字符.docx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《C8051F020UART0收发一组字符.docx》由会员分享,可在线阅读,更多相关《C8051F020UART0收发一组字符.docx(13页珍藏版)》请在三一文库上搜索。

1、/;UART0收发一组字符(48个)(通过)/ rxd_str 必须是全局变量,切使用前要赋值。/ rxd_str 不能是局部变量,局部变量会清零,/ 因为中断一次只能收一个字符rxd_str 不可能 =LENM/*文件描述:三相电测量上报功能说明:测量ATT7022B完成PCF8563上报定时(需校时)FM24C256转换数据存储UART0 口用于RS23纯数据UART1控制无线模块上报数据创建:2006 年 12 月 5 日/* 函数:main.*xx :无 * 出口:无* 功能说明:接收UART端口命令 执行读ATT7022B的数据进行处理、存储和回发数据*/ /* / 包含的文件/*

2、#include #include #include /* / 函数:init_sysclk(void) / 功能 :时钟初始化/xx :无 / 出口:无 / 说明 :使用外部时钟 12M /* void init_sysclk (void)uint i=0;OSCXCN=0x67;/external oscillator with 12MHz crystal for(i=0;i256;i+);/ XTLVLD blanking while(!(OSCXCN & 0x80);/ Wait for crystal osc. to settleOSCICN=0x88;/时钟丢失检测,选择外部时钟1

3、0 / 13CKCON = 0x00押寸钟分频/*函数:void enable_wdog(void)void disable_wdog(void)功能:使能、禁止 wdogxx:无出口 :无说明:*void enable_wdog(void)WDTCN=0xA5;/ 允许看门狗定时器工作void disable_wdog(void)/ 禁止看门狗定时器工作WDTCN=0xDE;WDTCN=0xAD;/*函数:void init_ioport()功能:端口配置及端口位定义xx:无出口 :无说明:*/void init_ioport()XBR0=0x07;/TXD0-P0.0 RXD0-P0.1,

4、SPI_SCK-P0.2,SPI_MISO- P0.3/SPI_MOSI-P0.4,SPI_NSS-P0.5,SDA-P0.6,SCL-P0.7,XBR2=0x44;/端口 I/O弱上拉允许,TX1-P1.0,RXD-P1.交叉开关允许XBR1=0X10;/INT1 使能 INT1-P1.2P0MDOUT=0x00;端口 0输出方式寄存器:0-漏极开路P0=0xff;P1MDIN=0XFF;/端口 1输入方式寄存器:0-配置为数字输入P1MDOUT=0x00;/端口 1输出方式寄存器,0-漏极开路P1=0xff;P2MDOUT=0x00;/端口 2输出方式寄存器:0-漏极开路P2=0xff;P

5、3MDOUT=0X00;/端口 3输出方式寄存器:0-漏极开路P3=0xff;P74OUT=0x00;/端口 7-4输出方式寄存器:0漏极开路P4=0xff;P5=0xff;P6=0xff;P7=0xff;/ 函数:void Delay_ms (unsigned ms)/ 功能:实现 xx 功能 Timer0_ms/* Configure Timer0 to delay */void Delay_ms (unsigned ms)uchar i;/ millisecond counterTCON &= 0x30;/ STOP Timer0 and clear overflow flagTMOD

6、|=0x01;/ configure Timer0 to 16-bit modeCKCON |=0x08;/ Timer0 counts SYSCLKsfor (i = 0; i 8;/ set Timer0 to overflow in 1msTL0 = -SYSCLK/1000;TR0 = 1;/ START Timer0while (TF0 = 0);/ wait for overflowTF0 = 0;/ clear overflow indicator/ 函数:void Delay_us (unsigned us)/ 功能:实现 xx 功能 Timer0_us/* Configure

7、 Timer0 to delay */void Delay_us (unsigned us)uchar i;/ microseconds counterTCON &= 0x30;/ STOP Timer0 and clear overflow flagTMOD |=0x01;/ configure Timer0 to 16-bit modeCKCON |=0x08;/ Timer0 counts SYSCLKsfor (i = 0; i 8;/ set Timer0 to overflow in 1usTL0 = -SYSCLK/1000;TR0 = 1;/ START Timer0while

8、 (TF0 = 0);/ wait for overflowTF0 = 0;/ clear overflow indicator/*/ 函数:unsigned char my_add(uchar my_add)/ 功能:读开关状态确定子地址/xx :无 / 出口:子地址/ 说明:子地址存于myaddxx(即设备号)/*void my_add(void)P74OUT |=0XD0;myadd =P5;/*/ 函数:void jiaob(ATT_JB)/ 功能:写校表寄存器/ 说明:UART 口接收校表时间并存于 FM24C256中/*void jiaob (void)main()disable_

9、wdog();/ 关看门狗init_sysclk ();/ 时钟初始化init_ioport();/ 交叉开关配置my_add();/ 读设备子地址设置UART0_Init();UART0 初始化EX1= 1;/开 INT1EA = 1;/开 xxrxd_str=0;while(1)if(uart0_flag)rxd_str=0;uart0_flag = 0;m=ur0_rxd;txd_string(m,LENM);/ 判断本设备命令及命令内容执行命令 / 串口初始化/void UART0_Init(void)SCON0 = 0x50;扉 口方式 1,波特率可变PCON |= 0x00;/SM

10、OD = 0TMOD = 0x20;/选择 T1 方式 2,TH1 = 0xe8;/T1 初值 ,TL1 = 0xe8;ES0 = 1;/UART0xxf启TR1 = 1;/启动定时器T1/ 发送单个字符/void txd_char(unsigned char ch)SBUF0 = ch;/l入缓冲区while(TI0 = 0);/等待发送完毕TI0 = 0;/软件清零/发送字符串,调用Send_Char() le仔符串长度/void txd_string(unsigned char * str,unsigned char len)unsigned char k = 0;do txd_char

11、(*(str+k) );k+; while(k =LENMvoid uart0_isr(void) interrupt 4 using 1unsigned char rxch; if(RI0)/中断标志RI0=1数据完整接收RI0 = 0;/软件清零 rxch = SBUF0;/卖缓冲if(rxd_str=LENM)uart0_flag=1;rxd_str=0;ur0_rxdrxd_str = rxch;/ 存入数组,供发送rxd_str+; */main.h/*#ifndef mainh #define mainh /* / 全局常量/* #defineuchar unsigned char

12、#defineuint unsigned int#defineSYSCLK#defineCMD_RESET 0X11#defineCMD_TIME 0X12#defineCMD_DATA 0X13#define fm_Write_add0xA0#define fm_Read_add0xA1#define Fm_add0xA0/fm24c256 器件从地 ?#define LENM 0x30#define LENM 0x30/ 全局变量/unsigned char rxd_str;unsigned char * m;unsigned char xdata fm_read_buf60=0;unsi

13、gned char xdata fm_write_buf60=0;unsigned char xdata pcf_d16=0;/data of pcf8563unsigned char xdata *d_ptr;unsigned char xdata ur0_rxd60;/ 每次接收字符串unsigned char xdata ur0_txd60;/ 要发送的字符串unsigned char xdata att_rd90;unsigned char xdata att_wd60;/ att7022 of dataunsigned char xdata att_jb40;/ 校表数组 (myad

14、d=0)unsigned char idata period;/ 时间间隔unsigned char idata myadd;unsigned char *str;unsigned char chksum;unsigned char ATT_W_ADD;/ ATT Read status registerunsigned char ATT_R_ADD;/ ATT Write status registeruchar slave_add,fm_ram_add,send_byte,write_num,read_num;uchar fm_send_count,fm_receive_count,fm_

15、send_len,fm_receive_len;sbit SDA=PM6;*模拟I2C数据传送位*/sbit SCL=Pi7;I2 I2C时钟控制位*/sbit ATT_CS = P3八0; ATT CS signalsbit D_E = Pi3;485收发控制?bitack;bit ack;bit uart0_flag;/ 中断接收完成标志bit uart1_flag;/ 中断接收完成标志bit sm_busy;收发开始置1,操作结束后由中断清0bit fm_err_flag;/子函数声明void uart0_isr();/ 串口中断服务程序,接收字符void UART0_Init(void

16、);void txd_char(uchar ch);void txd_string(uchar * str,uchar len);void init_sysclk (void);void enable_wdog(void);void disable_wdog(void);void init_ioport();void Delay_ms (unsigned ms);void Delay_us (unsigned us) ;void my_add(void);void jiaob (void);void ATT_Write (uchar ATT_WADD, uchar att_wd);unsign

17、ed char ATT_Read (uchar ATT_RADD,uchar att_rd);void SPI0_Init (void);void Start_I2c();void Stop_I2c();void Ack_I2c();void SendByte(uchar x);uchar RcvByte();bit ISendStr(uchar sla,uchar suba,uchar *d_ptr,uchar no);bit IRcvStr(uchar sla,uchar suba,uchar *d_ptr,uchar no);void WriteClock(void);void StartClock(void);void init_sysclk (void);void init_ioport();void init_smbus(void);void smbus_receive (uchar chip_select,byte_address,receive_num);void smbus_send (uchar chip_select,byte_address,write_num);void enable_wdog(void);void disable_wdog(void);#endif13 / 13

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1