当前位置:首页 >> 信息与通信 >>

C8051F单片机和PC机串口通讯程序


//-----------------------------------------------------------------//串口编程--接收 PC 发过来的字符串,回发字符串.发送期间中断控制 LED 灯闪烁 //采用外部晶振 22.1184MHz 使用定时器 1,方式 2 产生波特率,SMOD = 0 或者 1 //定时器初值 X=256-SYSCLK*(SMOD

+1)/(BAUDRATE*384) // //程序编写: 郭郭 //编程时间: 2005,12,30 //最后修改: 2005,12,31 //-----------------------------------------------------------------#include <C8051F020.h> sfr16 TMR3RL = 0x92; sfr16 TMR3 = 0x94; #define uchar unsigned char #define uint unsigned int //-----------------------------------------------------------------//参数设置区 //-----------------------------------------------------------------#define BAUDRATE 4800 #define CLKOUT 22118400 #define SMODVAL 0 #define PCONVAL 0x00 #define MAX_LEN 10 //全局变量 //-----------------------------------------------------------------sbit LED = P1^6; bit readFlag = 0; uchar readCounts = 0; uchar idata trdata[MAX_LEN]; //子函数声明 //-----------------------------------------------------------------void SYSCLK_Init(void); void PORT_Init(void); void UART0_Init(void); void Send_Char(uchar ch); void Send_String(uchar * str, uint len); void UART0_ISR(); void Timer3_Init(uint counts); void Timer3_ISR(void); //主函数 //-----------------------------------------------------------------//系统时钟初始化 //端口初始化 //串口 UART0 初始化 //发送单个字符 //发送一个字符串 //定时器 3 初始化 //定时器 3 中断服务程序 //串口中断服务程序,接收字符 //LED '1'亮 '0'灭 //读标志 //已经读取的字符个数,与 MAX_LEN 比较 //要接收/发送的字符串 //波特率 bps //外部晶振,修改也要修改 OSCXCN //SMOD 的值,修改请也修改 PCONVAL //PCON 的值,=0x00 时 SMOD0=0; =0x80 时 SMOD0=1 //每次接收/发送字符串的长度 //定时器 3 重装载寄存器 //定时器 3 计数器

#define TXVAL (256-CLKOUT*(SMODVAL+1)/BAUDRATE/384) //定时器初值

//------------------------------------------------------------------

//------------------------------------------------------------------

//------------------------------------------------------------------

void main(void) { WDTCN = 0xde; WDTCN = 0xad; SYSCLK_Init(); PORT_Init(); UART0_Init(); Timer3_Init(CLKOUT/12/10); EA = 1; while(1) { if(readFlag) { readFlag = 0; //清零 //发送字符串 Send_String(trdata,MAX_LEN); } } } //-----------------------------------------------------------------//子函数具体实现 //-----------------------------------------------------------------//系统时钟初始化 void SYSCLK_Init(void) { uint i; OSCXCN = 0x67; for(i=0;i<256;i++); while(!(OSCXCN&0x80)); /采用外部晶振 22.1184MHz,不分频. 选型 OSCXCN=0110,0111 //等待>1ms //查询直到 XTLVLD=1,晶振稳定 //已经读取 //时钟初始化 //端口初始化 //串口初始化 //定时器初始化 //开全局中断 //禁止看门狗

OSCICN = 0x88;//切换到外部振荡器,允许时钟失效监测器. OSCICN=1000,1000 } //端口初始化 void PORT_Init(void) { XBR0 = 0x04; XBR1 = 0x00; XBR2 = 0x40; //交叉开关使能 P0MDOUT |= 0x03; //P0.0 为推拉方式输出,即 TX0,RX0 所在的端口 0000,0011 P1MDOUT |=0x40; //P1.6 为推拉方式输出,即 LED 所在的端口 0100,0000 } //串口初始化 void UART0_Init(void) { SCON0 = 0x50; TMOD = 0x20; //选择串口方式 1,波特率可变 SCON0=0101,0000 //选择 T1,方式 2,自动再装入 8 位计数器 //允许 UART0,RX,TX 连到 2 个端口引脚. XBR0=0000,0100

TH1 = (int)TXVAL;//T1 初值,根据波特率,时钟等计算. 0xF4, bps=4800bps TL1 = (int)TXVAL; ES0 = 1; TR1 = 1; TI0 = 1; TR0 = 1; } //定时器初始化 void Timer3_Init(uint counts) { TMR3CN = 0x00; TMR3RL = -counts; TMR3 = 0xffff; EIE2 |= 0x01; TMR3CN |= 0x04; } //发送单个字符 void Send_Char(uchar ch) { SBUF0 = ch; while(TI0 == 0); TI0 = 0; } //发送字符串,调用 Send_Char() len 字符串长度 void Send_String(uchar * str,uint len) { uint k = 0; do { Send_Char(*(str + k)); k++; } while(k < len); } //定时器 3 中断服务程序 void Timer3_ISR(void) interrupt 14 using 0 { TMR3CN &= ~(0x80); //清 TF3 LED = ~LED; } //UART0 中断服务程序. 接收字符 void UART0_ISR(void) interrupt 4 using 1 { uchar rxch; //送入缓冲区 //等待发送完毕 //软件清零 //禁止定时器 T3,清 TF3,采用 SYSCLK/12 为时基 //初始化重装载值 //设置为立即重装载 //T3 中断开启 //启动 T3 //UART0 中断开启 //启动定时器 T1 //声明 TX0 就绪,可以发送

PCON |= PCONVAL; //PCON=0x00,SMOD = 0 ; PCON=0x80,SMOD=1

if(RI0) { RI0 = 0; rxch = SBUF0;

//中断标志 RI0=1 数据完整接收 //软件清零 //读缓冲

if(readCounts>=MAX_LEN) { readCounts = 0; readFlag = 1; } trdata[readCounts] = rxch; readCounts++; } } //------------------------------------------------------------//程序结束 //-------------------------------------------------------------//存入数组,供发送

相关文章:
C8051F系列单片机串口通讯程序
C8051F系列单片机串口通讯程序_信息通信_工程科技_专业资料。C8051F 系列单片机串口通讯程序采用 C8051F020 单片机 //串口编程--接收 PC 发过来的字符串,回发...
C8051F单片机和PC机串口通讯程序
C8051F020例程 33页 1财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 C8051F单片机和PC机串口通讯程序 C8051F单片机...
PC机与单片机之间的串口通信分析
要能够进行数据 传送也必须首先测试双方是否可以可靠通信。可在 PC 机和单片机上各编制非常 短小的程序,具体可分成 PC 机串行口发送接收程序单片机串行口发送程序...
单片机与PC机串口通信实验报告
单片机与PC机串口通信实验报告_计算机硬件及网络_IT/计算机_专业资料。单片机与...(ALE) G X N D D 1 0.1uF C25 G 3.3V N D 1 C14 u F 结束 J10 ...
51单片机与PC串口通讯
51单片机与PC串口通讯_计算机硬件及网络_IT/计算机_专业资料。PC机通过查询方式访问...(); //串口初始化 InitControl(); //控制端口初始化 while(1) //主程序...
单片机和PC机串口通讯试验
前言: 前言: 串口通讯单片机而言意义重大, 不但可以实现将单片机的数据传 串口通讯单片机而言意义重大, 输到电脑端,而且也能实现电脑单片机的控制。 输到...
单片机PC机串口通讯并LED显示程序及截图
单片机PC机串口通讯并LED显示程序及截图_工学_高等教育_教育专区。须先下载VSPD软件将两个虚拟串口连接起来,然后才能传输数据。8.程序清单 程序清单 #include <reg51...
单片机与PC机的串口通信_毕业论文
单片机与PC机串口通信_毕业论文_工学_高等教育_教育专区。引言 安徽矿业职业技术学院毕业课题(设计)任务书(2015 届)题目 指导教师 院专班学姓系业级号名 20 ...
c51f310串口通讯程序
单片机串口通讯程序 3页 1下载券 C语言做串口通讯程序 2页 1下载券喜欢...<C8051F310.h> #include <stdio.h> sfr16 TMR3RL = 0x92; //定时器 3...
PC机与多个51单片机串口通讯
PC机与多个51单片机串口通讯_信息通信_工程科技_专业资料。PC机与多个51单片机串口通讯PC 机与多个 51 单片机串口通讯 最近需要用 PC 机与多个 51 单片机通过...
更多相关标签:
c8051f310 串口通讯 | 单片机与pc机串口通信 | 单片机串口通讯 | 单片机串行口通讯实验 | ros与单片机串口通讯 | 触摸屏单片机串口通讯 | 单片机串口通讯程序 | 单片机串口多机通讯 |