历史上的今天
返回首页

历史上的今天

今天是:2024年11月15日(星期五)

正在发生

2019年11月15日 | IO模拟串口之中断方式发送(后台运行?)

2019-11-15 来源:51hei

#include
//内部振荡器4M,看门狗关,上电复位延时,开外部复位脚,数据保护关,代码保护关,关掉电复位


__CONFIG(FOSC_INTRCIO & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF); //12F675 
#define uchar unsigned char
#define uint  unsigned int
#define TX GP0
#define RX GP1
#define KEY GP2
#define R_S GP4
#define LED GP5
uchar TX_REG,T_TMP;
bit TX_IF;
void delay_ms(uint wm) //进入退出一次8个指令周期
{
uchar i;
for(;wm!=0;wm--)
{
  i=163;
  while(i--);
  NOP();
  NOP();

}
/*
模拟串口,定时器中断发送方式,波特率9600
*/
void UART(uchar U_D) 
{
while(T0IE); //等待上一次数据发送完毕
TMR0=175;  //预充值
TX=0;   //发送起始位
T0IF=0;   //清零定时器中断
T0IE=1;   //定时器0中断使能
TX_REG=U_D;  //转移数据到发送缓存
T_TMP=8;  //预置需要发送的位个数(8位数据)
TX_IF=1;  //数据发送完毕标志
}
void init()
{
CMCON = 0b00000111; //关闭内部比较器
ANSEL = 0;   //全部为数字IO
TRISIO = 0b00001110; //设置RA0为TX,RA1为RX,RA2为IRQ,RA3为复位,RA4为,RA5为
GPIO   = 0b00000001; //
OPTION_REG=0b00001110;//GPIO上拉,TMR0时钟为内部
WPU = 0b00001110;
INTCON = 0b11000000;
}
void main(void)
{
init(); 
while(1)

  if(KEY==0)
  {
   delay_ms(100);
   if(KEY==0)
   { 
    UART('O');
    UART('K');
    UART('r');
    UART('n');
   }   
  }
}
}
void interrupt INT()
{
if(T0IF) //检测到定时器0中断
{
  TMR0=169; //预充值
  if(T_TMP) //检测数据是否发送完毕
  {
   TX=TX_REG; //输出数据
   TX_REG>>=1; //移位数据
   --T_TMP; //
  }
  else   //发送完毕后进行停止位发送
  {
   if(TX_IF)
   {
    TX=1;
    TX_IF=0;   
   }
   else 
   {
    T0IE=0;  //发送完毕后关闭定时器中断
   }
  } 
  T0IF=0;
}
}

以上程序为定时器中断方式IO模拟串口,
优点就是占用CPU少(只使用一次子函数后一直等待定时器中断才处理一次),
缺点是占用一个定时器

推荐阅读

史海拾趣

喜美克斯(Cvilux)公司的发展小趣事

在市场竞争日益激烈的电子行业中,喜美克斯公司始终坚持品质至上的原则。公司投入大量资源用于产品质量控制和生产工艺的改进,确保每一件产品都能达到最高的品质标准。这种对品质的执着追求,让喜美克斯的产品在市场上赢得了良好的口碑,也为公司赢得了众多忠实的客户。

Advanced Ceramic X Corporation公司的发展小趣事

随着公司规模的逐渐扩大,喜美克斯公司开始思考如何进一步拓展市场。他们深入研究市场趋势和消费者需求,制定了针对不同市场的精准营销策略。通过与当地合作伙伴的紧密合作,喜美克斯成功地将产品打入了多个新兴市场,实现了销售额的快速增长。

General Instrument Corp公司的发展小趣事
确保电源电压在规定范围内,并稳定可靠。
Hamamatsu公司的发展小趣事
如果使用外部参考电压,请确保参考电压稳定且准确。
东晶(ECEC)公司的发展小趣事

东晶电子自创立以来,始终将技术创新作为公司发展的核心动力。在21世纪初,随着通信技术的迅猛发展,对高性能、高稳定性的石英晶体元器件需求急剧增加。东晶电子凭借其强大的研发团队,成功研发出一系列高精度、高稳定的石英晶体谐振器和振荡器,打破了国外厂商的技术垄断,为中国通信产业提供了关键元器件支持。这一技术突破为公司赢得了市场口碑,也奠定了其在电子行业中的领先地位。

Antiference公司的发展小趣事

近年来,随着物联网、5G等技术的快速发展,电子行业面临着巨大的变革。Antiference公司敏锐地捕捉到这一趋势,及时调整战略方向,将研发重点转向物联网设备的电磁兼容性研究。通过不断创新和优化产品,Antiference成功抓住了物联网发展的机遇,实现了业务的快速增长。

问答坊 | AI 解惑

输入电阻和输出电阻(纠结了好长时间,看完就懂了)

     关于输入电阻和输出电阻,纠结了好长时间,现在终于明白了,拿出来给大家看一下,呵呵      输入电阻是用来衡量放大器对信号源的影响的一个性能指标。输入电阻越大,表明放大器从信号源取的电流 ...…

查看全部问答>

evc4.0能开发wince5.0的程序么--急!

evc4.0能开发运行在wince5.0的程序么? 对于bin文件有什么要求么? 还是有其他别的注意事项啊? 原来运行在wince4.2上正常的程序,到wince5.0就不是有效的wince程序了是什么问题, 详细介绍最好啊!!!…

查看全部问答>

SOS:ucOS中,第2次调用OSTimeDly()死机

我按照步骤把 ucos 移植到 ZLG 的 easyARM 开发板上,前面工作进行的挺顺利,但最近被这个问题给卡住了,半个月了,还没有搞定。 请求高手解疑释惑啊: 在一些初始化工作之后,创建了两个任务: void main(void) {     OSInit(); & ...…

查看全部问答>

春节后,开始找工作

我在深圳,大家有没有好的推荐? 顶者有分噢!…

查看全部问答>

初学者问题

刚学单片机,在仿真时,出现connection to target lost是什么原因? 还有个问题,在eeworld上传图片时,提示出现不明错误,无法上传,本来有图片的话,能把问题描述的更清楚些。…

查看全部问答>

为什么用vs2005还是EVC4SP4编译刚建好的例子时总提示要连接ActiveSync呢?

为什么用vs2005还是EVC4SP4编译刚建好的例子时总提示要连接ActiveSync呢? 环境是WINCE5 ,ActiveSync装的版本是4.2中文版. 是不是调试的时候一定要插上硬件呢?不插上可以调试WINCE5平台下开发的程序吗? EVC4下的错误提示是: An application ...…

查看全部问答>

团购:OpenJTAGV3 USB转并口&串口 价格:138元!

OpenJTAGV3 USB转并口&串口 EEWORLD团购:价格:138元! 买时备注上:EEWORLD团购,然后我改价格!;P   玩arm9  好帮手! 可以在win和linux调试arm7,M3,arm9 --例如:Fl2440 micro2440 OK2440开发板;   可以直接烧写24 ...…

查看全部问答>

望请指点啊

我用的是四位八段共阳数码管 程序如下 显示有问题 module smg_wela(                                 clk,             &nbs ...…

查看全部问答>

便携式医疗监控系统面临的设计挑战

本帖最后由 dontium 于 2015-1-23 13:16 编辑     作者:Jonathan Bearfield, Texas Instruments      当今的政府与医疗机构正努力完善其医疗体系,以更好地为病人服务。为了让病人有更多时间在家中养 ...…

查看全部问答>

求解:TI的MBUS芯片TSS721的TX、RX收发数据问题!!

最近用TI得TSS721焊了一个MBUS从站电路,本来已经正常工作了一段时间,但是昨天突然不行了。具体情况:用串口调试软件,发现TSS721的TX在RX悬空的情况下,发送数据正常;当RX、TX一起连接了串口,串口调试软件就看不见TX发送的数据了。 [ 本帖最后 ...…

查看全部问答>