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

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 机和单片机上各编制非常 短小的程序,具体可分成 PC 机串行口发送接收程序单片机串行口发送程序...
单片机与PC机的串口通信_毕业论文
单片机与PC机串口通信_毕业论文_工学_高等教育_教育专区。引言 安徽矿业职业技术学院毕业课题(设计)任务书(2015 届)题目 指导教师 院专班学姓系业级号名 20 ...
Labview实现PC机与C8051F320串口通信
Labview实现PC机与C8051F320串口通信_计算机软件及应用_IT/计算机_专业资料。用VISA实现PC机与C8051F320串口通信,完成简单的温度测量7...
五单片机和PC机串口通讯试验
实例: 求一个 PC单片机串口通信程序,要求如...(有的资源也很丰富的, 比如 c8051 系列的) , 这...传输速率有影响, 在试验套件中采用的是 0.1μ F...
基于C8051F340的串口通信程序
基于C8051F340的串口通信程序_信息通信_工程科技_专业资料。采用C8051F340为主芯片的单片机串口通信C语言程序,收到数据后把收到的数据主动发送出来。#...
PC机与多个51单片机串口通讯
PC机与多个51单片机串口通讯_信息通信_工程科技_专业资料。PC机与多个51单片机串口通讯PC 机与多个 51 单片机串口通讯 最近需要用 PC 机与多个 51 单片机通过...
c51f310串口通讯程序
单片机串口通讯程序 3页 1下载券 C语言做串口通讯程序 2页 1下载券喜欢...<C8051F310.h> #include <stdio.h> sfr16 TMR3RL = 0x92; //定时器 3...
PC机与MCS-51单片机的串口通信 毕业论文
PC机与MCS-51单片机串口通信 毕业论文_计算机硬件及网络_IT/计算机_专业资料。上位机和下位机的串口通信 引言PC 机 MCS-51 单片机串口通信 1 引言 1.1 ...
单片机与PC机串行通信的毕业论文设计
单片机与PC机串行通信的毕业论文设计_工学_高等教育_教育专区。安徽矿业职业技术学院...设计(论文) 1、本文的设计目标本设计是基于 MSP430F149 和 PC 机串口通讯。...
单片机与PC之间的串行通讯 毕业论文
单片机与 PC 之间的串行通讯 摘 要 随着计算机技术的发展,特别是单片机技术的迅猛发展,单片机被 广泛应用于大量工业控制系统。单片机拥有占有空间小,价格低廉,开 发...
更多相关标签: