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

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++; } } //------------------------------------------------------------//程序结束 //-------------------------------------------------------------//存入数组,供发送

相关文章:
单片机与PC机串口通信实现正文_图文
毕业设计(论文)课题: 单片机与 PC 机串口通信实现 学生: 孙波 班级: 通信 1301 指导教师: 童华 系部: 通信工程 学号: 2013120325 装订交卷日期: 2016 年 x ...
AVR单片机与PC机串口通讯程序
AVR单片机与PC机串口通讯程序_计算机软件及应用_IT/计算机_专业资料。AVR单片机与...AVR单片机串行通信 21页 免费 C8051F单片机和PC机串口... 2页 1下载券 PC机...
单片机与PC机串口通信实验报告
单片机与PC机串口通信实验报告_计算机硬件及网络_IT/计算机_专业资料。单片机与...RESET G N D 1 R17 0 K 3.3V 1 C13 0 u 0.1uF G F C19 N D 2 ...
PC机与单片机之间的串口通信分析
要能够进行数据 传送也必须首先测试双方是否可以可靠通信。可在 PC 机和单片机上各编制非常 短小的程序,具体可分成 PC 机串行口发送接收程序单片机串行口发送程序...
c8051f120使用UART与PC通信总结
C8051F120 使用 UART 与 PC 通信总结 一, 开发环境 单片机 C8051F120 编程...3,串口处理程序 Uart_Handler() 以上程序包括打印接收到的字符串,命令比对,执行...
汇编语言实现串口通信(PC和单片机间)_图文
汇编语言实现串口通信(PC单片机间)_计算机软件及应用_IT/计算机_专业资料。8....为了保证数据通信的可靠性,要制定 通信协议,然后各自根据协议分别编制程序。现...
单片机与PC机的串口通信_毕业论文
单片机与PC机串口通信_毕业论文_工学_高等教育_教育专区。引言 安徽矿业职业技术学院毕业课题(设计)任务书(2015 届)题目 指导教师 院专班学姓系业级号名 20 ...
PC与单片机的串口通讯的简单实例
实验实现的功能主要是:用 PC 上的一个软件通过串口通讯控制单片机 I/O 口的输出。本次实验主要涉及 PC 端上位机的程序编写(用 VC)与单片机程序 的编写(用 ...
Labview实现PC机与C8051F320串口通信
Labview实现PC机与C8051F320串口通信_计算机软件及应用_IT/计算机_专业资料。用VISA实现PC机与C8051F320串口通信,完成简单的温度测量7...
pc机与单片机通过串口调试助手进行通讯
pc机与单片机通过串口调试助手进行通讯_信息与通信_工程科技_专业资料。pc机与单片机通过串口调试助手进行通讯PC 机与单片机通过串口调试助手进行通讯 这个程序很有用处,...
更多相关标签:
单片机与pc机串口通信 | 单片机 pc机 串口通信 | 单片机串口通讯 | 单片机串行口通讯实验 | 触摸屏单片机串口通讯 | 单片机串口多机通讯 | 单片机串口通讯程序 | ros与单片机串口通讯 |