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少(只使用一次子函数后一直等待定时器中断才处理一次),
缺点是占用一个定时器

关键字:模拟串口  中断方式  后台运行 引用地址:IO模拟串口之中断方式发送(后台运行?)

上一篇:PIC的35条指令扭曲理解法
下一篇:用PIC16F1824的内部DAC做正弦波发生器测试

推荐阅读最新更新时间:2024-11-08 18:42

MSP430单片机的IO口配置
1. I/O端口简介 1.1 I/O端口简介 MSP430最多时有6组I/O端口的,每一组时有8位。也就是P1到P6,8位也就是说,P1.0到P1.7。那么MSP430单片机就有48个通用I/O端口。下面先来看一下总共的特点是MSP430一个好的特点是,给用户提供了一个比较多的外部中断能力,比如说P1口和P2口就有中断能力。 MSP430单片机数字I/O的一些特点: ※完全独立的可编程的数字I/O; ※每一个都可以配置为输入或输出; ※P1和P2端口都是可以独立配置成中断的; ※都具有独立的输入输出寄存器。 1.2端口P1、P2结构 该图是P1、P2的结构图。 通用端口P1和P2各有8个引
[单片机]
MSP430单片机的<font color='red'>IO</font>口配置
STM8学习笔记----普通IO模拟串口功能
串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能。 要模拟串口首先要清楚串口数据传输过程中的原理。 常用的串口格式为 1位起始位,8位数据位,无校验位,1位结束位。起始位为低电平,结束位为高电平。数据0为低电平,数据1为高电平。 所以最简单的串口传输一个字节总共有10个电平变化,每个电平的宽度由波特率决定的。 具体的串口数据分析,可以参考这篇文章:STM8学习笔记---通过示波器分析串口数据。 下面看一个通过波特率如何计算每个位的电平宽度。 发送一个字节,以stm8中9600bit/s的波特率计算的过程为例(1秒钟传输
[单片机]
STM8学习笔记----普通<font color='red'>IO</font>口<font color='red'>模拟</font><font color='red'>串口</font>功能
串口不定长接收数据--空闲中断方式测试
1.问题描述: 使用串口的空闲中断和接收中断进行串口数据的不定长接收 2.测试平台: (1)芯片STM32F756VGT6 (2)IAR软件环境 (3)使用芯片的串口6,和外接的RS485收发模块一起用做RS485通讯 3.实际操作: (1)串口初始化: void MX_UART6_Init(void) { huart6.Instance = USART6; huart6.Init.BaudRate = 115200; huart6.Init.WordLength = UART_WORDLENGTH_8B; huart6.Init.StopBits = UART_STOPBITS_1
[单片机]
IO口做输入(按键控制想要的灯亮(共四个灯))
#include msp430x16x.h void main() { WDTCTL = WDTPW + WDTHOLD;//关看门狗 unsigned int i=60000; P1DIR &= ~BIT5;//输入 P4DIR |= BIT0; P4OUT |= BIT0; while(1) { if((P1IN&BIT5)==0)//二键按下 { while(i--); i=60000; if((P1IN&BIT5)==0) { while(P1IN&BIT5==0); P4OUT ^=BIT0
[单片机]
DCS控制器中采用ARM处理器的冗余设计
在自动化的许多领域,有效性的要求越来越高,因而对自动化系统的容错水平的要求也变得越来越高,尤其在设备停机代价非常大的场合。为了满足这些严格的要求,在DCS系统中通常采用冗余技术,这样才能够满足这些领域所需要的安全性、可靠性和有效性的标准。 在DCS控制系统中,分布处理单元是系统关键的部分。当前这些分布处理单元的控制器往往是基于86系列CPU建构的,这种架构目前被广泛采用。但是由于86系列分布处理单元的特点,导致现在的控制器处理单元存在很多的缺点,如放热量大等。而且在封闭的环境中,这些问题始终很难解决。随着很多低功耗技术的发展和低功耗控制器的出现,分布处理单元的CPU可以有更多的选择,尤其是低功耗的控制器产生很少的热量,且可以使系统
[嵌入式]
AVR软件模拟串口程序
M48,8MHz 9600,1,8,1 输出:用定时器控制普通IO口输出位 输入:用外部中断+定时器,判断位的宽度 好几天没休息,利用闲暇写的,也没找到别人的参考程序,不过终于算是稳定了,其实还应该有很多其它的方法可以试一下,比如用PWM输出串行数据,用输入捕获接收数据,或定时查询,或用任意一个IO口中断,则每个引脚都有可能 现在还有些问题,全双工同时收发时发送偶尔出错,占用两个定时器有些浪费,以后再修改吧,最好加上各种波率 本程序为直接摘出部分,删了无关的部分,在此可能有些变量没用,或有段落遗漏,请谅 #include #include #include #include #define Sbit1()
[单片机]
MSP430F5529的IO口管脚的中断学习笔记
非常简单的一个程序,在F5529的开发板上用按键的IO中断控制LED的亮灭: #include int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= BIT0; //将LED1对应的IO口P1.0设置为输出 P1OUT &= ~BIT0; //初始化该灯设置为灭 P1DIR &= ~BIT7; //将按键1对应的IO口P1.7设置为输入 P1IFG &= ~BIT7; //初始化清空中断标志位 P1IE |= BIT7; //P1.7中断使能 P1IES |= BIT7; //下降沿产生中断
[单片机]
ADI公司如何让IO-LINK和工业以太网在智能工厂车间通信
本系列的第二篇博文介绍了如何使用IO-Link®从站收发器设计与网络无关的工业现场设备(传感器/执行器)。下一步是设计IO-Link主站,将这些设备与工业网络(或现场总线)连接起来,把工厂车间的过程数据传输到可编程逻辑控制器(PLC),如图1所示。这篇博文探讨了ADI公司的工业通信解决方案,这些解决方案可以加速灵活IO-Link主站的设计进展,该主站可支持智能现场设备使用较为热门的工业以太网协议进行通信。如果您还未阅读本系列的上一篇博文,请点击此处。 图1. IO-Link从站通过IO-Link主站连接到工业以太网 选择灵活的IO-LINK主站收发器 IO-Link主站接收传感器的过程值并将其聚合,然后传输到更高级
[物联网]
ADI公司如何让<font color='red'>IO</font>-LINK和工业以太网在智能工厂车间通信
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved