c51单片机与PC机之间的串行交流的C语言程序

c51单片机与PC机之间的串行交流的C语言程序,第1张

/*采用11.0592MHZ晶振,波特率9600*/

#include <reg51.h>

#include <intrins.h>

char temp

bit flag

void ser() interrupt 4

{

RI=0

temp=SBUF

flag=1

}

void serinit()

{

TMOD=0x20

TH1=0xfd

TL1=0xfd //设置波特率9600

SM0=0

SM1=1

REN=1

TR1=1

ES=1

EA=1

}

void main()

{

serinit()

while(1)

{

if(flag==1) // 判断是否完成接收

{

flag=0

ES=0 // 串口中断关闭

SBUF=temp // 将原先发送的值给缓存器(接发都是同一个,但意义不一样)

while(!TI)//判断是否发送完成

TI=0 // 是则硬件清0

ES=1// 再次打开串口中断

}

}

}

这个很简单,我教你怎么玩,下面是思路和方式\x0d\x0a思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用P0.0到P0.2来代替;输出2个或以上(这看你接什么显示器,如果是PC的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用P1.0、P1.1;\x0d\x0aPS:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用NPN传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我\x0d\x0a现在我们来写程序:\x0d\x0a#include //选用晶振11.0592MHz\x0d\x0aunsigned char k=0 //k表示正反转次数\x0d\x0asbit X0=P3^2//调节按钮\x0d\x0asbit X1=P1^1//上限位接近开关信号\x0d\x0asbit X2=P1^2//下限位接近开关信号\x0d\x0asbit Y1=P0^0//电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)\x0d\x0asbit Y2=P0^1//电机下降\x0d\x0avoid delay50ms(unsigned int i)\x0d\x0a{ \x0d\x0a unsigned int j\x0d\x0a for (ii>0i--)\x0d\x0afor(j=46078j>0j--)\x0d\x0a}\x0d\x0amain()\x0d\x0a{\x0d\x0a IT0=1 //下降沿触发\x0d\x0a EX0=1 //开P3.2外部中断\x0d\x0a EA=1 //总中断开 \x0d\x0a while(1)\x0d\x0a while(k)\x0d\x0a {\x0d\x0a Y1=0 //正转\x0d\x0a while(X1==1) //等待正转接近开关反应\x0d\x0a Y1=1 //正转停\x0d\x0a delay50ms(1)//停止时间50ms\x0d\x0a Y2=0//反转\x0d\x0a while(X2==1)//等待反转接近开关反应\x0d\x0a Y2=1 //反转停\x0d\x0a k--//圈数减一 \x0d\x0a }\x0d\x0a}\x0d\x0avoid counter0(void) interrupt 0\x0d\x0a{\x0d\x0a k++//外部中断控制圈数加一\x0d\x0a //这个位置可以加你显示程序\x0d\x0a}\x0d\x0a程序已经通过测试,放上去就能用,很好玩哟,呵呵


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8041926.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存