c串口编程
大概说下思路,串口在编程里相当于一个文件,因此要创建句柄来操作,还要给DCB结构休赋值进行串口配置等,你可以查下DCB结构体,记得在DOS下编程时,使用#include
<windows.h>。藏的深是为了更简单的使用。还有就是由于接受要一直进行检测,所以一般都专门开一线程进行监听。
‘贰’ 急!!!单片机C语言实现串口通信编程
如果在字符数字发送框发0X00蜂铃器就会叫,如果发0xff蜂铃器就停叫。
#include <REG52.H>
#include <stdio.h>
sbit BEEP = P1^4;
unsigned char b;
void main (void) {
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
BEEP=1;
// IE = 0x0;
while(1)
{
if (RI) //RI接受中断标志
{ RI=0; //清除RI接受中断标志
b=SBUF; //SUBF接受/发送缓冲器
}
BEEP=b;
}
}
这个是个发送程序,接收程序类似,不懂可继续追问,一般人都是在别人程序基础上改改称为自己的,希望楼主能够自己研究出自己的一套编程理论
‘叁’ C语言变成实现串口收发数据
#include <reg51.h>
#include <intrins.h>
unsigned char key_s, key_v, tmp;
char code str[] = "welcome!www.willar.com
";
void send_str();
bit scan_key();
void proc_key();
void delayms(unsigned char ms);
void send_char(unsigned char txd);
sbit K1 = P1^4;
main()
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1
IE = 0x0; // 禁止任何中断
while(1)
{
if(scan_key()) // 扫描按键
{
delayms(10); // 延时去抖动
if(scan_key()) // 再次扫描
{
key_v = key_s; // 保存键值
proc_key(); // 键处理
}
}
if(RI) // 是否有数据到来
{
RI = 0;
tmp = SBUF; // 暂存接收到的数据
P0 = tmp; // 数据传送到P0口
send_char(tmp); // 回传接收到的数据
}
}
}
bit scan_key()
// 扫描按键
{
key_s = 0x00;
key_s |= K1;
return(key_s ^ key_v);
}
void proc_key()
// 键处理
{
if((key_v & 0x01) == 0)
{ // K1按下
send_str(); // 传送字串"welcome!...
}
}
void send_char(unsigned char txd)
// 传送一个字符
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
void send_str()
// 传送字串
{
unsigned char i = 0;
while(str[i] != '