教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

PC与51单片机串口通信(2)

来源:网络收集 时间:2026-04-28
导读: //串行通信初始设置子函数 void init(void) { SCON=0x50; //串行通信方式1,接收允许 PCON=0x00; //单倍频 TMOD = 0x20; //设置定时器T1为模式2,定时方式 TH1=TL1=0xf3; //波特率为4800,晶振24MHz TR1=1; //定时

//串行通信初始设置子函数 void init(void) {

SCON=0x50; //串行通信方式1,接收允许 PCON=0x00; //单倍频

TMOD = 0x20; //设置定时器T1为模式2,定时方式 TH1=TL1=0xf3; //波特率为4800,晶振24MHz TR1=1; //定时器T1开始计数 EA=1; //中断允许

ES=1; //串行口中断开放 }

//LED显示函数 void Display(void) {

unsigned char n=0; unsigned char p;

unsigned char testdata1; unsigned char testdata2; unsigned char testdata3; unsigned char testdata4; unsigned char testdata5; unsigned char testdata6; unsigned char testdata7; unsigned char testdata8;

CH452_Write(CH452_SYSON2); //两线制方式,如果SDA用做按键中断输出,

//那么命令应该为(0x04,0x23)

CH452_Write(CH452_BCD); // BCD译码,8个数码管

while((4*n)<(m+1)) { testdata1=testdata[0+4*n]%16; testdata2=testdata[0+4*n]/16; testdata3=testdata[1+4*n]%16; testdata4=testdata[1+4*n]/16; testdata5=testdata[2+4*n]%16; testdata6=testdata[2+4*n]/16; testdata7=testdata[3+4*n]%16; testdata8=testdata[3+4*n]/16;

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

CH452_Write(CH452_DIG0 | testdata7); // 显示接收字符的ASCII码 CH452_Write(CH452_DIG1 | testdata8); CH452_Write(CH452_DIG2 | testdata5); CH452_Write(CH452_DIG3 | testdata6); CH452_Write(CH452_DIG4 | testdata3); CH452_Write(CH452_DIG5 | testdata4); CH452_Write(CH452_DIG6 | testdata1); CH452_Write(CH452_DIG7 | testdata2); delayms(1000); delayms(1000); delayms(1000); delayms(1000); n++; }

for(p=0;p<21;p++) { testdata[p]=0; } m=0; }

//串口接收发送中断

void Uart_Isr() interrupt 4 using 1 {

if(RI) { RI=0; testdata[m]=SBUF; if(testdata[m]=='!') { Display(); flag_inter=1; } else { m++; } } if(TI)

//延时 //数组清零 //接收中断标志

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

{

TI=0; //发送中断标志 flag=0; //标志位清零 } }

//向串口发送字符

void SendData(char data0) {

while(flag); ACC=data0;

flag=1; SBUF=ACC; }

//向串口发送字符串 void SendString(char *s) {

while(*s) {

SendData(*s++); } }

// INT1中断服务程序

void int1() interrupt 2 //using 1 {

TI=0;

SBUF=CH452_Read(); while(!TI); TI=0; }

void main() { delayms(10); init(); //等待数据发送 //标志位置1 //数据装入SBUF //字符串发送完否 //发送字符,并指针指向下一字符 //将按键值通过串口发给PC机检查 //延时 //串口初始化函数

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

// 设置CH452按键中断

IE1=0; //外部中断1 中断请求标志 EX1=1; //外部中断1中断允许 while(1) { if(flag_inter==1) { flag_inter=0; SendString("Wait command!\n"); } } }

附外加头文件: (1)CH452CMD.h

#define CH452_NOP 0x0000 #define CH452_RESET 0x0201 #define CH452_LEVEL 0x0100 #define CH452_CLR_BIT 0x0180 #define CH452_SET_BIT 0x01C0 #define CH452_SLEEP 0x0202 #define CH452_LEFTMOV 0x0300 #define CH452_LEFTCYC 0x0301 #define CH452_RIGHTMOV 0x0302 #define CH452_RIGHTCYC 0x0303 #define CH452_SELF_BCD 0x0380 #define CH452_SYSOFF 0x0400 #define CH452_SYSON1 0x0401 #define CH452_SYSON2 0x0403 #define CH452_SYSON2W 0x0423 #define CH452_DSP 0x0500 #define CH452_BCD 0x0580 #define CH452_TWINKLE 0x0600 #define CH452_GET_KEY 0x0700 #define CH452_DIG0 0x0800 #define CH452_DIG1 0x0900 #define CH452_DIG2 0x0a00 #define CH452_DIG3 0x0b00 #define CH452_DIG4 0x0c00 #define CH452_DIG5 0x0d00 #define CH452_DIG6 0x0e00 #define CH452_DIG7 0x0f00

// 空操作 // 复位 // 加载光柱值 // 段位清0 // 段位置1 // 进入睡眠状态 //设置移动方式-左移 //设置移动方式-左循 //设置移动方式-右移 //设置移动方式-右循 //自定义BCD码 //关显示、键盘 //开显示 //开显示、键盘 //开显示、键盘, 真正2线接口 //设置默认显示方式 //设置BCD译码方式 //设置闪烁控制 // 获取按键 //数码管位0显示 //数码管位1显示 //数码管位2显示 //数码管位3显示 //数码管位4显示 //数码管位5显示 //数码管位6显示 //数码管位7显示

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

(2)pin.h

/* 延时1uS子程序,主要用于2线接口,与单片机速度有关 */ #define DELAY_1US {_nop_();_nop_();} // MCS51<=30MHz

/* 4线接口的连接,与实际电路有关 */

sbit CH452_DCLK=P1^7; // 串行数据时钟上升延激活 sbit CH452_DIN=P1^6; // 串行数据输出,接CH452的数据输入 sbit CH452_LOAD=P1^5; // 串行命令加载,上升延激活

sbit CH452_DOUT=P3^3; // INT1,键盘中断和键值输入,接CH452的数据输出

/* 4线接口的位操作,与单片机有关 */ #define CH452_DCLK_SET {CH452_DCLK=1;} #define CH452_DCLK_CLR {CH452_DCLK=0;} #define CH452_DIN_SET {CH452_DIN=1;} #define CH452_DIN_CLR {CH452_DIN=0;} #define CH452_LOAD_SET {CH452_LOAD=1;} #define CH452_LOAD_CLR {CH452_LOAD=0;}

/* 与单片机有关,与中断连接方式有关 */ #define DISABLE_INTERRUPT {EX1=0;} #define ENABLE_INTERRUPT {EX1=1;} #define CLEAR_INTER_FLAG {IE1=0;}

PC与51单片机串口通信。包括单片机内运行的程序,及MATLAB调试助手简易程序等!

3、MATLAB控制数据收发

(1)利用STC提供STC-ISP-V4.83软件检查MCU选项(同2) (2)串行口初始参数设定(同2) (3)单片机内运行的程序(同2)

以上部分皆与“2、利用串口调试助手实现串行口数据收发”内容相同只是用MATLAB替代串口调试助手的功能。

(4)MATLAB数据收发功能实现简述

先用MAT …… 此处隐藏:3602字,全部文档内容请下载后查看。喜欢就下载吧 ……

PC与51单片机串口通信(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/269551.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)