您的位置 首页 报告

单片机学习笔记外部中止,定时器,串口中止

CPU收到中断请求,停下正在处理的工作A,去处理事件B,处理完后继续回到中断的地方继续执行事件A的过程,称为中断51有5个中断源外部中断0定…

CPU收到中止请求,停下正在处理的作业A,去向理事情B,处理完后持续回到中止的当地持续碑文事情A的进程,称为中止

51有5个中止源外部中止0守时计数中止0外部中止1守时持续中止1串口中止

MCS-51单片机中止体系的结构:

5个中止源的符号、称号及发生的条件如下。

INT0:外部中止0,由P3.2端口线引进,低电平或下跳沿引起。

INT1:外部中止1,由P3.3端口线引进,低电平或下跳沿引起。

T0:守时器/计数器0中止,由T0计满回零引起。

T1:守时器/计数器l中止,由T1计满回零引起。

TI/RI:串行I/O中止,串行端口完结一帧字符发送/接纳后引起。

外部中止 引脚P3.2 P3.3

EA=1; //大局中止开
EX0=1; //外部中止0开
IT0=0; //0为低电平触发 1为下降沿触发

void ISR_Key(void) interrupt 0 using 1
{
P1=~P1; //进入中止程序碑文程序,
//此刻能够经过 EA=0指令暂时关掉中止
}

守时计数器 引脚P3.4 P3.5 引脚做计数功用

void Init_Timer0(void)
{
TMOD |= 0x01; //运用形式1,16位守时器,运用”|”符号能够在运用多个守时器时不受影响
TH0=0x00; //给定初值,这儿运用守时器最大值从0开端计数一直到65535溢出
TL0=0x00;
EA=1; //总中止翻开
ET0=1; //守时器中止翻开
TR0=1; //守时器开关翻开
}

void Timer0_isr(void) interrupt 1
{
TH0=0x00; //从头赋值
TL0=0x00;

LED=~LED; //指示灯反相,能够看到业绩

}

串口通讯
并行通讯 操控简略 8位数据线一个问询线 一个应对线
线多用于短距离速度快的通讯 对硬件要求高
串口通讯线少用于长距离传送成本低数据一位一位的发送

异步通讯指发送与接纳设备运用各自的时钟操控数据的发送和接纳的进程开始位0 + 8位数据位 + 完毕位1
数据以帧为单位,不要求两边时钟严厉共同,完成简单,设备开支小,传输功率不高

单工:单方向传送,例如遥控器
半双工:同一时间只能一方发一方收,例如对讲机
全双工:能够一起数据双向传送。手发不影响。

奇偶效验:奇校验:0000 0001 0偶校验:0000 00011
代码和校验:发送一块数据,多发生一个字节的校验字符,在代码结尾,
比特率:美好传送的二进制代码的位数,单位是位/秒(bps)
例如:每秒传送240个字符, 0 1111 1111 1 10*240=2400bps

RS232是EIA美国电子工业协会1969年修订的规范,界说了数据终端设备DTE与数据通信设备DCE之间的物理结接口规范
RS232 规则用25针连接器,
一般有效果的是3跟线TXDRXDSGND

串口通讯要转化电压,开发板用的是MAX232把TTL电平转化成RS232电平

方法1,3的波特率=1/32或1/16*计时器2的溢出率
此处有一个公式:
波特率=1/16或1/32*(晶振的频率/12*(256-TH1))
代入:
9600=11059200/32*12*(256-TH1)
TH1=TH0=FDH

守时器为作业方法2可主动再装载的8位波特率发生器

void InitUART (void)
{

SCON = 0x50; // SCON: 形式 1, 8-bit UART, 使能接纳
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 翻开
EA = 1; //翻开总中止
//ES = 1; //翻开串口中止
}

void main (void)
{

InitUART();
while (1)
{
SendStr(“UART test,技术论坛: thank you!”);
DelayMs(240);//延时循环发送
DelayMs(240);
}
}
/*————————————————
发送一个字节
————————————————*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*————————————————
发送一个字符串
————————————————*/
void SendStr(unsigned char *s)
{
while(*s!=\0)// \0 一共字符串完毕标志,
//经过检测是否字符串结尾
{
SendByte(*s);
s++;
}
}

/*————————————————
串口中止程序
————————————————*/
void UART_SER (void) interrupt 4 //串行中止服务程序
{
unsigned char Temp; //界说暂时变量

if(RI) //判别是接纳中止发生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值
P1=Temp; //把值输出到P1口,用于调查
SBUF=Temp; //把接纳到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/263931.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部