临夏网站制作,淘宝seo是什么,郑州网站建设新闻,怎么做刷业网站基于普中的stc89c52#xff0c;
串口#xff1a; 通讯接口#xff0c;51单片机自带UART#xff08;通用异步收发器#xff09;#xff0c;可实现窗口通讯。
硬件电路#xff1a; 简单双向串口通信有两根通信线#xff08;发送端TXD和接收端RXD#xff09;#xff0…基于普中的stc89c52
串口 通讯接口51单片机自带UART通用异步收发器可实现窗口通讯。
硬件电路 简单双向串口通信有两根通信线发送端TXD和接收端RXDTXD和RXD需要交叉连接单向数据传输时可以接一根通信线电平协议不一致需要加电平转换芯片。 电平标准 电平标准是数据1和数据0的表达方式是传输线缆中人为规定的电压与数据的对应关系串口常用的电平标准有三种 TTL电平5v表示10v表示0 RS232电平-3~-15V表示13~15V表示0
以上电平距离十多米以上传输信号就会错乱 RS485电平两线压差2~6V表示1-2~-6V表示0差分信号
RS485传输距离远 流控制调整传输速率和接收速率不匹配的情况 同步的带时钟线SCLSCLK
全双工两根线设备a和设备b可以同时发
半双工一根线利用同一根线收发分时复用一根线
单工只能单向传输 51单片机里的UART 串口参数及时序图 波特率串口通信的速率发送和接收各数据位的间隔时间 检验位用于数据验证奇偶校验 停止位用于数据帧间隔 比特率bit传送多少位
串口模式图 配置ESEA
波特率计算
-----------------------------------------------------
SCON 0x40;//模式一SM00,SM11; PCON | 0x80;//波特率 TMOD 0x0F; //设置定时器模式 TMOD | 0x20; //设置定时器模式八位自动重装 TL1 0xF3; //设置定时初值和波特率有关 TH1 0xF3; //设置定时初值 ET1 0; //禁止定时器1中断 TR1 1; //启动定时器1
---------------------------------------------------------
以12MHZ的晶振为例每过1微秒记一次数
定时器为0xF3十进制为243八位寄存器每隔256溢出一次与初始值相差13个数(每记13个数溢出一次)每隔13微秒溢出一次TI的溢出率即为1/13 0.07692307692307692307692307692308 MHZ
SMOD 1
1/13 0.07692307692307692307692307692308 MHZ / 16 4,807.6923076923076923076923076923 HZ
频率没有与晶振对应所以会产生误差
误差值为溢出率/波特率
0.07692307692307692307692307692308 / 4,807.6923076923076923076923076923
1.6000000000000000000000000000001e-5
所以会产生0.16/100的误差
如果不选择SMOD就先 / 2再 / 16
串口相关寄存器
PCON电源寄存器前两位与串口有关
串口控制寄存器SCON和PCON 配置目标让UART处于模式1工作状态模式18位UART
SCON 0x40 //SM00SM11//模式一给二进制位0100 0000十六进制0x40
PCON0 /波特率配置
------------------配置定时器
串口中定时器有自己的工作模式
-----------------------------------------------------
SCON 0x40;//模式一SM00,SM11; PCON | 0x80;//波特率 TMOD 0x0F; //设置定时器模式 TMOD | 0x20; //设置定时器模式八位自动重装 TL1 0xD0; //设置定时初值和波特率有关 TH1 0xFF; //设置定时初值 ET1 0; //禁止定时器1中断 TR1 1; //启动定时器1
---------------------------------------------------------
定时器和波特率stc配置样例 发送速率过快或者波特率过高都会产生误差可以采用低波特率和Delay延迟函数解决
配置单片机收数据
把REN置为1
SCON 0x50;//模式一SM00,SM11; PCON | 0x80;//波特率 TMOD 0x0F; //设置定时器模式 TMOD | 0x20; //设置定时器模式八位自动重装 TL1 0xD0; //设置定时初值和波特率有关 TH1 0xFF; //设置定时初值 ET1 0; //禁止定时器1中断 TR1 1; //启动定时器1 EA 1//启动中断 ES 1//启动串口中断
中断号
void UART_Routine() interrupt 4 串口中断号4
单片机是用同一个串口同时收发所以在中断函数里面用if判断是接收中断还是发送中断
一个函数不能再主函数和中断函数中同时调用
数据显示模式
HEX模式/二进制模式以原始数据形式显示
文本模式/字符模式以原始数据编码后的数据显示
数据在文本模式时需要用ascll码进行编码在进行发送可以传输的数据为0-255对应ascll码表
在实际传输过程中只传输二进制码只是显示方式不一样
LED点阵屏 本次使用的开发板只是一个8*8单色点阵
显示原理 类似于数码管点阵屏只能扫描法显示不同内容 74HC595可控制多位输出 QA--QH输出端
OE上加横线说明低电平有效OE使能接口只有OE低电平芯片才工作
RCLK寄存器时钟
SRCLR串行清零端 直接接VCC代表不清空
SRCLK串行时钟
SER:串行数据
--------------------------------------------
SER串行数据
数据分串行一个一个在时钟的激励下出去和并行同时输出
串行数据接移位寄存器把数据写入高电平控制时钟上升沿移位SERCLK把SER清零再给一个上升沿移位数据会一个一个向下移动 RCLK会把移位寄存器的数据移位到输出端给RCLK一个上升沿 以上是一片74HC595的工作方式
QH 多片级联
当移位寄存器满的时候SER继续给1输出端会输出到QH给下一个移位寄存器
每一片移位寄存器的时钟是连接到一起的当所有的移位寄存器满的时候数据移位完成是上升沿锁存RCLK会控制所有的移位寄存器输出到输出缓冲区
单片机低电平强高电平弱如直接接芯片IO口会影响亮度如果用三极管放大电路进行放大输出电平IO口作为控制电路这样缓冲后可以增加导通效果
同一列输出和同一行输出灯亮度不一样恒压输出和恒流输出
c51中的sfr、sbit在头文件中可以找到
sfr:特殊功能寄存器声明
例如sfr P0 0x80 声明P0口寄存器物理地址为0x80
sbit特殊位声明
例如sbit P0_1 0x81; 或 sbit P0_1 P0^1; /声明P0寄存器的第一位 可位寻址/不可位寻址
单片机系统中操作任意寄存器或者某一位数据时必须给出其物理地址又因为一个寄存器里有八位所以位的数量是寄存器数量的8倍。单片机无法对所有位进行编码故每8位寄存器中只有一个是可以寻址的对不可寻址的寄存器若只操作其中一位而不影响其他位可以用“”“|”“^”的方法进行位操作
-----------------------------
sbit RCK P3^5; //把P3的第五位命名为RCLK等同于操作P35
采用不同的命名方法来保证避免命名冲突 高位优先推入QH
SER第一个给最高位值把byte的最高位取出赋值给SER 单片机初始化后所有的IO口都是高电平所以要操作sck要把先赋值为0 上升沿移位由0置1后SER给的高位1被移入下一层移动结束后再次置0为下一次移动准备 重复移位 用for循环解决 上升沿移位完成后进行上升沿锁存把八位数据送到IO口上 点阵屏代码 当Column 0 ,P07 0.其他输出1 代码改进 段选 位选 段选 位选 段选 位选 //点阵屏重复执行会把位选的数据影响到段选数据所以要消影
消除残影所以加上延时 位清零