一.单片机I/O线
P3.0—RXD串口接收
P3.1—TXD串口发送
P3.2—INT0外部中断0
P3.3—INT1外部中断1
P3.4—T0硬启动,计数输入
P3.5—T1硬启动,计数输入
P3.6—WR—写RAM
P3.7—RD—读RAM
VCC:电源端接+5V;GND:接地端;
RST/VPD:1.复位信号的输入,2.VCC掉电后,此引脚可以接备用电源,保持RAM中的数据。
EA/VPP:EA=0,单片机访问外部ROM,EA=1的时候,单片机访问内部ROM。
ALE/PROG:第一个是作为地址锁存器允许,这里口直P0低八位地址总线AB的允许,ALE输出的频率为时钟频率的1/6。
PSEN:外部程序存储器ROM的选通信号,与OE相连。
通过将单片机的I/O引脚位进行置位或清零来点亮或关闭LED灯(and按键实验)
二. 串口通讯
单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信
• STC89C52 有 1 个 UART
STC89C52 的 UART 有四种工作模式:
模式0:同步移位寄存器
模式1:8位UART,波特率可变(常用)
模式2:9位UART,波特率固定
模式3:9位UART,波特率可变
有模块与单片机相连时,模块的TXD与单片机的RXD(P30)相连,模块的RXD与单片机的TXD相连
void UART_Init() //串口初始化
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
EA=1; //开启总中断
ES=1; //开启串口中断
}
————————————————
版权声明:本文为CSDN博主「海啸49」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_67025806/article/details/124763383
三.定时器
作用
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2)替代长时间的Delay,提高CPU的运行效率和处理速度
(属于单片机的内部资源,其电路的连接和运转均在单片机内部完成)
•定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
STC89C52RC的T0和T1均有四种工作模式:(T0,T1较为普遍的51内的定时器)
- 模式0:13位定时器/计数器
- 模式1:16位定时器/计数器(常用)
- 模式2:8位自动重装模式
- 模式3:两个8位计数器
定时器初始化
void Timer0Init(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}
定时器中断模板
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
T0Count++;
if(T0Count>=1000)
{
T0Count=0;
}
}
四.中断系统
当中断功能执行时,单片机优先处理中断程序,当中断处理完成后,再回到单片机的正常程序执行中。
中断的优先级和嵌套:
在主程序中,中断1和中断2同时出现,这时候要考虑中断的优先级。
如果在一个中断中出现了另一个中断,且第二个中断优先级比前一个中断高,这时会嵌套执行第二个中断。
8个中断请求源及其优先级:
最高级: 外部中断0:INT0 外部中断1:INT1
比较级:外部中断2:INT2 外部中断3:INT3
原籍: 定时器0 定时器1 定时器2
中断的分别介绍:
1、外部中断0:INT0
P3.2管脚,通过控制TCON的IT0来确定下降沿或低电平触发;若IE0置1,就说明来了一个中断。EX0和EA都为1即可使用中断。
IP是自己控制中断的优先级,一般为默认即可。
2、外部中断1
P3.3管脚,通过控制TCON的IT1来确定下降沿或低电平触发;若IE0置1,就说明来了一个中断。EX1和EA都为1即可使用中断。
IP是自己控制中断的优先级,一般为默认即可。
3、T0和 T1:定时计数器的功能
T0 P3.4管脚 T1 P3.5管脚
若是16位计数器,那么计数到65535时,就会溢出,TF0就会自动置1,发出中断请求。
4、串口中断(串口为什么使用定时器后面讲)
RX P3.0 发送 TX P3.1 接受
如果RI和TI中有一个大于等于1(或门),就会发出中断请求。
配置定时器
①对 TMOD 赋值,以确定 T0 和 T1 的工作方式
②根据所要定时的时间计算初值,并将其写入 TH0、TL0 或 TH1、TL1
③如果使用中断,则对 EA 赋值,开放定时器中断
④使 TR0 或 TR1 置1,启动定时/计数器定时或计数
例如:定时器0定时1毫秒
(1)TMOD的配置
高4位置0,低4位:00(定时功能)01 TMOD |= 0X01;
使用或运算:不干扰定时器1的使用,对高4位无影响。
(2)TH0和TH1的配置:
1毫秒除以1微秒(机器周期),看看需要计数几次;需要计数1000次;65536-1000=64536;将64536转换成16进制(FC18),高8位写入TH0,高8位写入TL0;TH0=0XFC, TL0=0X18。
定时器计算软件:定时选择方式1
五.总线与系统扩展
单片机的外部扩展
首先,关于外部扩展有存储扩展、I/O扩展、T/C扩展、中断系统的扩展,其中存储扩展包括了ROM和RAM的扩展,
其次,扩展的原则—三总线原则
1)数据线与数据线相连接(P0口)
2)地址线与地址线相连接(P0口接锁存器低8位,P2口高8位地址线)
注意1:P0口通过接锁存器,为了确定使用的是地址线,而不是数据线
3)控制线与外部芯片控制线相连
六.DA/AD数模转换
CS:片选信号输入端,低电平有效,CS引脚软件置0后,表示ADC0804被选中。
RD:读信号输入端,低电平输出端有效。
WR:写信号输入端,低电平启动AD转换。
A/D
进入程序后,①CS软件置0——>②WR软件置0,启动AD——>③延时8个时钟周期以上(具体多少,可调试)——>④RD置0,开始读数据——>⑤延时几个时钟周期后(可调试)开始读取单片机芯片P1寄存器的数据
D/A
进入程序后,①CS软件置0——>②WR软件置0,启动DAC0832——>③延时Ts时间后读取输出(Ts时间可调试)