#include
#define uchar unsigned char
uchar rtemp,sflag;
void SerialInit(void)
{
TXSTA=0x24; //开启发射使能位、高波特率,TRMT初始值可0可1
RCSTA=0x90; //开启串口、连续接收、
SPBRG=0x19; //4M晶振,波特率9600,则SPBRG初值为25
RCIE=1; //开启串口接收完成中断
GIE=1; //开全局中断
PEIE=1; //开第一外设中断
}
void interrupt SerialService(void) //接收中断
{
if(RCIE&&RCIF)
{
RCIF=0; //清零接收完成标志位
rtemp=RCREG; //读接收缓冲区
sflag=1;
}
}
void main(void)
{
SerialInit();
while(1)
{
if(sflag==1)
{
RCIE=0; //发送前关闭接收中断允许位
sflag=0;
TXREG=rtemp; //数据送发送缓冲区
while(!TXIF); //等待发送完成,众想教程中查询的是TRMT,并且发完后未清零TRMT
TXIF=0; //清零发送完成标志位
RCIE=1; //发送完成开启接收中断允许位
}
}
}
关键字:PIC单片机 PIC16F877A 串行收发
引用地址:
PIC单片机(PIC16F877A)串行收发程序
推荐阅读最新更新时间:2024-03-16 16:06
PIC16F877A单片机的PWM功能
说明:设置PWM 操作 通过以下步骤将CCP 模块配置为PWM 模式: 1. 写入PR2 寄存器以设定PWM 周期。 2. 写入DCxB9:DCxB0 位以设置PWM 占空比。 3. 将相应的TRIS 位清零以将CCPx 引脚设为输出。 4. 写入T2CON 以设置TMR2 预分频比并使能Timer2。 5. 将CCP 模块配置为PWM 模式。 程序: #include pic.h #define uint unsigned int #define uchar unsigned char __CONFIG(0x3B31); void initPWM(); void Delay1ms(uint time); /******
[单片机]
pic单片机功耗问题的解决
最近一周一直在做pic单片机功耗问题。由于项目使用电池供电,所以功耗问题显得非常重要。根据数据手册以及网络上的资料,影响单片机功耗主要由以下几个因素: 1:所有I/O引脚保持为高阻输入高点平或低电平 2:关闭比较器和CVref(可编程偏上参考电压)、WTD、T1OSC、BOR(欠压复位)等 3:PORTB片内弱上拉 4:所有不用的模块全部关闭,在用到时再打开 5:MCLR引脚必须处于逻辑高电平 PIC单片机在执行SLEEP指令后进入睡眠省电模式。进入SLEEP模式后,主振荡停止,如果看门狗在烧写时打开了,看门狗定时器将被清并保持运行。I/O口,周边模块和内部RAM将保持原来状态,所以如果要求睡眠后有很低功耗,应该在进入
[单片机]
关于PIC单片机“读-修改-写”的相关说明
关于PIC单片机 读-修改-写 的相关说明 Topic: I have seen references to Read-Modify-Write instructions in your datasheet, but I do not know what that is. Can you explain what it is and why I need to know this? 我曾在数据手册里看到 读-修改-写 的相关说明,但我不知道这是什么。你能解释一下它的含义以及为什么要注意它吗? Discussion: An easy example of a Read-Modify-Write (or RMW) instru
[单片机]
基于PIC16F877A的简易数字频率计的设计
//本 程序 利用CCP1模块实现一个“简易数字频率计”的功能 #include pic.h #include stdio.h #include math.h const char table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0xFF}; //不带小数点的显示段码表 const char table0 ={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xFF}; //带小数点的显示段码表 bank3 int cp1z ; //定义一个数组,用于存放各次的捕捉值
[单片机]
PIC单片机或运算指令XORWF的应用
大家都知道,PIC单片机的大多数寄存器,包括RAM数据存储器的每个存储单元都能实现移位、清位、位测试等系列复杂操作功能。然而,协调它们运行的(应用最广泛的基本级、中级)精简指令集中,却没有对寄存器的某“位”进行“取反”运作的现成指令,而在实际应用中对某些“位”进行取反运作是很需要的。如下图所示。单片机PIC16C622单片机的端口RB作为输出端口的8个引脚,分别控制着8个不同的电器设备。按动按钮AN一下,继电器J吸合,再按一下J释放,即按动AN一下,端口RB3引脚的输出状态改变一下,而RB口的其它7个引脚输出保持原有状态不变。在这种情况下最好的方法是按动一下AN,对PORTB(3)“取反一次”——这对于MCS-51单片机来讲是极容易
[单片机]
PIC单片机USART的应用
//★★★★★★★★★PIC单片机USART的应用(串口通信)★★★★★★★★★★★\ //单征机型号:PIC16F877A //功能描述:PIC单片机USART的应用,串口调试助手发送数据给877,877收到后再转发回串口助手 //通过“串口调试助手”协助工作 #include pic.h //包含单片机内部资源预定义 __CONFIG(0xf73a); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 //======================================================================== //功能描述:主程序
[单片机]
使用PIC单片机开发的简易数字电压表
对于单片机初学者来说,数字电压表是一个不错的练习项目。在本文中,单片机开发工程师们分享了一个使用PIC单片机开发的简易数字电压表。该数字电压表的范围是0-20V,当然你也可以自己增加或减少输入电压的范围。 在这个方案中,使用的是microchip的PIC16F688单片机,该PIC单片机通过8个模拟通道之一读取输入电压,并使用内部ADC将其转换为10位数字。用ADC转换做一些数学运算,该数字可以转换为实际测得的电压。电压显示在基于HD44780的字符LCD上。 一、数字电压表电路图和说明 你无法将20V信号直接馈入PIC单片机的输入通道。它的工作电压过高,可能会损坏单片机。因此,首先我们需要一个电压缩放器,
[单片机]
PIC单片机的一个简单的SPI小程序
这里介绍一个简单的PIC单片机SPI测试小程序,希望大家能够喜欢。 // DAC module connections sbit Chip_Select at RC0_bit; sbit Chip_Select_Direction at TRISC0_bit; // End DAC module connections unsigned int value; void InitMain() { TRISA0_bit = 1; // Set RA0 pin as input TRISA1_bit = 1; // Set RA1 pin as input
[单片机]