c51单片机原理及应用重点
1、单片机内部资源STC89C52:8KFLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源(1)Flash(硬盘)——程序存储空间 —— 擦写10万次,断电数据不丢失,读写速度慢(2)RAM(内存)——数据存储空间 —— 断电数据丢失,读写速度快,无限次使用(3)SFR —— 特殊功能寄存器2、单片机最小系统51单片机的内部组成及应用原理解析最小系统:最少组件组成单片机可以工作的系统。三要素:(1)、 电源电路:5V(2)、 晶振电路:11.0592MHZ、两个30PF(3)、 复位电路:P0:开漏输出,必须加上拉电阻准双向口:强推挽输出:电流驱动能力强高阻态上下拉电阻:上拉电路就是将不确定的信号通过一个电阻拉到高电平,同时限流作用。下拉电阻就是下拉到低电平。上下拉电阻选取:从降低功耗方面考虑应该足够大,因为电阻越大,电流越小;驱动能力来看,小电阻3、硬件基础知识(1)、电磁干扰(EMI)——静电放电(ESD)、快速瞬间脉冲群(EFT)、浪涌(Surge)(2)、去耦电容的使用低频滤波电容,平常应用最多的事钽电容,电解电容,陶瓷电容,起到去除电源低频纹波,稳定电源的作用。高频滤波电容,电容附近,通常用104电容来进行去除高频干扰。(3)、三极管(PNP,NPN) b,c,e --- 电压驱动控制应用驱动应用4、LED发光二极管——电流驱动51单片机的内部组成及应用原理解析通常红色贴片LED, 靠电流驱动,电压1.8V~2.2V,电流1~20mA,在1~5mA亮度有所变化,5mA以上亮度基本不变。VCC 电压是 5V,发光二极管自身压降大概是 2V,那么在右边 R34 这个电阻上承受的电压就是 3V。R = U/I —— 1~20mA —— R:150~3K5、C语言基础(1)、基本运算符+ - * / % ++ -- = == != += -= 《《 》》
51单片机加74hc595驱动多个数码管静态显示的程序设计
1、首先数码管分为1位,4位,8位,4位和8位的又分为共阴和共阳数码管。2、共阳数码管,即阳极全部连接在一起,单片机接口给低电位即可点亮对应的段位。3、可利用MCS-51系列单片机的芯片AT89C52的P3.4,P3.5,P3.6,P3.7进行计时并在数码管上显示时间,作为按键的入口。4、共阴数码管,即阴极全部连接在一起,单片机接口给高电位即可点亮对应的段位。5、其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。
跪求单片机原理与应用及c51程序设计的答案
END
章6 80C51的串行口
1.答:四种工作方式,由SCON中的SM0、SM1进行定义:
方式0:同步移位寄存器的输入输出方式,主要用于扩展并行输入或输出口,波特率固定。
方式1:10位数据的异步通信口,波特率可变。
方式2:11位数据的异步通信口,波特率固定。
方式3:11位数据的异步通信口,波特率可变。
2.答:RS-232C接口、RS-422A接口、RS-485接口
3.答:最大距离与传输速率及传输线的电气特性有关。当传输线使用每0.3m(约1 ft)有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当波特率超过1000 bps 时,最大传输距离将迅速下降。
4.答:在波特率一定的情况下,带负载数的多少,与信号能传输的最大距离是直接相关的。在总线允许的范围内,带负载数越多,信号能传输的距离就越小;带负载数越少,信号能传输的距离就越远。故应减小通信距离或减少负载数量。
5.答:电路图如下:
ORG 0000H
MOV SCON,#10H
LOOP:CLR P1.7
NOP
NOP
NOP
SETB P1.7
CLR RI
JNB RI,$
MOV A,SUBF
SJMP LOOP
END
6.答:电路图如下:
ORG 0000H
MOV SCON,#00H
MOV P1,#0FFH
LOOP:MOV A,P1
MOV SUBF,A
JNB TI,$
CLR TI
SJMP LOOP
END
我正在写一篇基于AT89C52单片机的数字时钟设计。下面是我的论文后面的程序图。
思路有点问题,以上所列的这些功能不需要使用中断来处理。
中断不是不能用,但如果没有必要,能不能还是不要用,中断属于非线性的处理方式,不可控的因素太多,比如,中断嵌套,重入。如果处理不好,会极大的降低系统的可靠性。
你所列的这些功能,并不需要精确的延时。举个例子,你秒讯闪烁时,应该是亮0.5秒,灭0.5秒,要如果你亮0.45秒,灭0.55秒,再亮0.52秒,灭0.47秒,有什么关系吗?正常使用时根本不会感觉到任何差别。
比较合理的做法是 以判断定时闹钟为例,在主程序中控制主循环的总时间,比如,确保每500ms主程序循环一次。这个循环的时间不需要很准确,500ms循环一次,或者400ms循环一次,甚至再短一些也没关系,只要控制最大不超过500ms就可以。每0.5秒检查一下闹钟,然后给出提示,用户不会感到有什么不舒服的。
具体是多少时间需要综合考虑,比如你要处理定时闹钟,每1秒钟处理一次即可,如果要处理按键,这个时间可以提高到100ms,这样按键时不会有明显的迟顿。综合考虑会一般取最短的一个延时,控制主循环的延时就可以。
以我的经验,你的系统只需要开一个比较短的定时中断进行显示扫描,并在定时中断处理过程中顺便维护一个计时器用于主程序同步就足够。像这样,
static unsigned iCounter;
_isr_t0 ( void )
{
// 每5ms中断一次
iCounter+=5;
// 显示扫描
}
main( void )
{
while( 1 )
{
如果iCounter 增加了500ms,则: 读1302, 检查闹钟
}
}