1.串口
通信原理
通信原理分为串行和并行,这次使用的是串行通信原理。
IAP15F2K61S2系列单片机具有2个采用UART(Universal Asychronous Receiver/Transmitter)
工作方式的全双工串行通信接口(串口1和串口2)。
每个串行口由2个数据缓冲器、一个移位寄存器、一个串行控制寄存器和一个波特率发生器等组成。
每个串行口的数据缓冲器由2个互相独立的接收、发送缓冲器构成,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码。99H(串口1:SBUF),9BH(串口2:S2BUF)
两个串行口都有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用。串行口1对应的硬件部分是TxD/P3.0和RxD/P3.1引脚。串行口2对应的硬件部分是TxD2,RxD2。
通过设置特殊功能寄存器AUXR1中的S1_ S1,串行口1(UART1)功能可以在[P30/P31],[P36RxD2/P37TxD2],[P16RxD3,P17TxD3]任意切*换。
寄存器
罗列一下需要的寄存器(用蓝色标注了)
串行控制寄存器SCON(可位寻址)和波特率选择特殊功能寄存器PCON(不可位寻址)。
实验1:单片机发送给上位机指定的字符串
void UartInit(void) //9600bps@12.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xC7; //设定定时初值
TH1 = 0xFE; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1; //串口中断允许
EA =1; //总中断开
}
void main()
{
All_Init();
UartInit();
while(1)
{
Uart_Sendstring("i love yoi!\r\n");
}
}
void usatr() interrupt 4
{
if(RI) //如果接收到了
{
uartbuff = SBUF;
RI = 0;//手动清零
}
else if(TI)
{
TI = 0;
uart_busy = 0;//发送完成 清零
}
}
void Uart_SendData(uchar dat)
{
while(uart_busy);
SBUF = dat;
uart_busy = 1; //发送忙 当发送完后才会清0
}
void Uart_Sendstring(uchar *str)
{
while(*str)
{
Uart_SendData(*str++);
}
}
实验2:发送字符到数码管上显示,同时接收区返回相同的字符(重点沿研究ASII与hex的关系)(最后将NUM显示在数码管上就好了)
void uart() interrupt 4
{
if(RI) //如果接收到了
{
RI = 0;//手动清零
num = SBUF;//接收缓冲区
SBUF = num;//发送缓冲区
}
else if(TI)
{
TI = 0;
}
}
2.NE555
1.原理图
2.蓝桥杯要求没有那么严格,总归来说蓝桥杯的设计就是将它作为了一个可变频率脉冲发生器。简要来说就是通过滑动变阻器Rb3来改变频率。
题目的要求一般为:
用NE555产生用于评率测量功能测试的方波信号,信号频率为500Hz----20kHZ(应该是差不多在这个范围内),可将P34引脚与方波信号发生器输出引脚NET_SIG短接。
用定时器0,让T0工作在计数模式下,而计数的引脚就是我们的P34,进行频率测量的时候,将定时器初值设为0,然后利用另外一个定时器来限定时间在1S或者几秒内,在规定时间完后,停止基数,将定时器0的值取出来,看有多少个脉冲,然后用总脉冲量/总时间,得出的即为脉冲的周期。(跟超声波的程序思路差不多)
来源:CSDN
作者:avalovef
链接:https://blog.csdn.net/avalovef/article/details/104349472