Ⅰ 单片机实验注意事项
单片机开发规则与注意事项
随着大规模集成电路技术的发展,单片微型计算机也随之大发展,各种新颖的单片机层出不穷。单片机具有体积小、重量轻、应用灵活且价格低廉等特点,广泛地应用于人类生活的各个领域,成为当今科学技术现代化不可缺少的重要工具。
单片机系统的开发融合了硬件和软件的相关技术。要完成单片机系统的开发,用户不仅需要掌握编程技术,还需要针对实际应用选择合理的单片机芯片和外围器件,以此为基础,设计硬件电路。
正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。
要完成单片机系统的开发,用户不仅需要掌握编程技术,还需要针对实际应用选择合理的单片机芯片和外围器件,以此为基础,设计硬件电路。
单片机开发规则与注意事项
设计满足要求的最精简的系统
正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。
看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复位信号,重新复位单片机。更新看门狗的具体形式多是给看门狗芯片相关引脚提供一个电平上升沿或读写它的某个寄存器。使用看门狗电路将在单片机发生故障进行死机状态时,重新复位单片机,像EN8F154本身就带有看门狗。
确定系统的复位信号可靠
一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。
确定系统的初始化有效
系统中的芯片以及器件从上电开始到正常工作的状态往往有一段时间,程序开始时延时一段时间,是让系统中所有器件到达正常工作状态。究竟延时多少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的为准。一般来说,EN8F154的延时20-100毫秒已经足够。对于系统中使用嵌入式MODEM等“慢热”型的器件来说,则应更长。当然,这都需要在系统实际运行中进行调整。
当然,仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真机,也能进行一些硬件排错。一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。仿真有CPU仿真和ROM仿真两种,所谓CPU仿真是指用仿真机代替目标机的CPU,由仿真机向目标机的应用电路部份供给各种信号、数据,进行调试的办法。
Ⅱ 单片机有哪些设计实验
51单片机的设计实验比较多,先以下推荐几个入门级的
1、流水灯实验;
2、数码管显示实验;
3、外部中断实验;
4、液晶屏1602或者12864实验;
5、定时器实验;
Ⅲ 单片机实验 二进制到BCD转换
51汇编不熟,给你写个C的吧(转非压缩的BCD),加上注释,你自己改成51汇编吧.
int i = 100; // i 用来做被除数,初值"100".
int idx = 0; // idx 用来确定存储位置的偏移,初值"0".
while( i ) // 循环条件,被除数不为"0",则继续循环.
{
Result[idx] = A / i; // Result 第 idx 偏移位置保存 A 整除 i 的值.
A -= Result[idx]*i; // A 的值 减 Result 第 idx 偏移位置 * i 的值.
i/=10; // 将 i 的值除以"10"
idx++; // Result的偏移值 加"1".
}
以上的思想是
A 整除 100 作为 百位上的BCD
(A-百位上的值) 整除 10 作为 十位上的BCD
(A-百位上的值和十位上的值) 作为个们上的BDC.
Ⅳ 单片机实验
你只要知道怎么控制IO就可以了。不知道你的LED是采用什么方式接入P1口的,如果是LED正极经过限流电阻接正电源,负极接P1口的话,那么就是当P1口某个引脚为低电平时,LED点亮。
这样的话,你这个1357,2468不知道是先亮1,然后1灭了换3,在3灭换5亮。。还是1357同时亮,然后2468同时亮,不过我告诉你思路你自己就编程了
先使P1=0XFF这样所有LED均熄灭。
然后因为1357实际对应的P1口IO是P1.0,P1.2,P1.4,P1.6, 那么如果需要他们点亮,因为上面我说的是P1的某个IO为低电平,LED点亮,那么给P1口我上面说的这几个IO变为低电平就可以了。
即二进制的P1.7->P1.0(高->低)10101010.换算为16进制就是0XAA(如果是要1亮,然后变成1灭3亮。。。。这样的话只需要P1.0先为低电平,即二进制的11111110 16进制的0xFE然后P1.0变为高电平P1.2为低电平,即二进制的11111011,16进制的0xFB,依次算出16进制对应的数,当7单独亮时就是01111111,16进制的0x7F,2,4,6,8一样,我就不在说了)
这样让P1口=0xAA就可以实现你所说的1,3,5,7亮了
同理,2,4,6,8就是P1.1,P1.3,P1.5,P1.7换算为二进制就是01010101即16进制的0x55.
让P1口=0x55就可以了
另外因为单片机执行程序的速度很快,所以你如果是
P1=0XAA
P1=0X55这样的话可以说你看来根本就是8个LED同时亮着。所以需要在每句下面加个延时函数使每个亮0.几秒钟,使眼睛可以看到他们的变化
所以要做个延时函数
void delay(unsigned char i)
{
unsigned char j,k;
for (j=i,j>0,j--)
{
for(k=255,k>0,k--);
}
}
调用时只需要给delay函数赋值就可以了
比如
P1=0XAA;
delay(200);
P1=0X55;
delay(200);
其他的就你自己写了。。
我靠。。刚看你写的是要汇编的。。
那么上面P1=0XAA这些就要改成
MOV P1,#AAH
MOV P1,#55H
延时就需要这样了
DELAY:
MOV R0,#200
DELAY1:
MOV R1,#255
DELAY:
DJNZ R1,DELAY
DJNZ R0,DELAY1
RET
这样你上面就是
MAIN:
MOV P1,#AAH
CALL DELAY
MOV P1,#55H
CALL DELAY
SJMP MAIN
Ⅳ 急求:单片机实验
:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最简短、高效的排序程序.
MOV B, #7 ;第一轮排序时,比较7次.
S1: MOV R0, #30H ;数据区的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交换"标志位.
S2: MOV A, @R0 ;取前一个数.
INC R0
CLR C
SUBB A, @R0 ;减后一个数,前<后时,Cy=1
S3: JC S4 ;有借位时,不用交换,转移.
MOV A, @R0 ;取后一个数,准备交换.
DEC R0
XCH A, @R0 ;交换到前一个.
INC R0
XCH A, @R0 ;交换到后一个.
SETB PSW.5 ;设定"交换"标志位.
S4: DJNZ R7, S2 ;继续本轮比较.
JNB PSW.5, ENDS ;如本轮没有进行过交换,可提前结束.
DJNZ B, S1 ;下一轮,比较次数少一次.
ENDS:
RET
;-----------------------------------------------------
END
Ⅵ 单片机实验内容及结果分析
熟悉单片机的原理、结构;学好数电、模电,为设计电路打好基础;熟练使用C语言,多学习他人的程序;对操作系统原理有一定的了解,Protel有一定的基础;培养实际动手调试电路的能力。一般可以通过专业的书籍和课程进行持之以恒的学习,注意理论与实践并重,遇到问题耐心检查并适当投资购买实验器材。
Ⅶ 单片机定时/计数器实验2-脉冲计数器
这是个简易频率计,程序如下:
;---------------------------------
ORG0000H
JMPSTART
ORG000BH
JMPT0_INT
;---------------------------------
START:
MOVTMOD,#51H;/*01010001T1计数,T0定时*/
MOVTH0,#HIGH(65536-50000);50ms@12MHz
MOVTL0,#LOW(65536-50000)
MOVTH1,#0
MOVTL1,#0
SETBTR0
SETBTR1
SETBET0
SETBEA
MOVR7,#20
SJMP$
;---------------------------------
T0_INT:;50ms执行一次
MOVTL0,#LOW(65536-50000);重新写入初始值
MOVTH0,#HIGH(65536-50000);50ms@12MHz
DJNZR7,T0_END
MOVR7,#20
MOVP1,TL1
MOVP2,TH1
MOVTL1,#0
MOVTH1,#0
T0_END:
RETI
;---------------------------------
用PROTEUS仿真如下图。
图中信号的频率是5000Hz,显示的1388是16进制,这是题目中要求的形式。
Ⅷ 单片机实验数据排序
原发布者:瀚海湛蓝
实验一、数据排序实验一、实验目的熟悉8031指令系统,掌握程序设计方法。二、实验内容编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验程序框图NNN四、实验步骤1把8032片内RAM区50H—5AH中放入不等的数据(用寄存器读写方法)。2用连续运行方式从起始地址0100H开始运行程序(输入0100后按EXEC键)。3排序结束,显示“P.”。4用寄存器读写方法检查50—5AH中内容应从小到大排列。五、参考程序DORDE:MOVSP,#60H;设置栈指针MOVR3,#50HDORDE1:MOVA,R3MOVR0,A;数据指针传送到R0MOVR7,#0AH;长度送到R7CLR00H;清零标志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC;清零进位标志MOV22H,@R0CJNEA,22H,DORDE3;是否相等SETBCDORDE3:MOVA,R2JCDORDE4;小于或等于不交换SETB00HXCHA,@R0DECR0XCHA,@R0;大于交换位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1;未完继续MOVR0,#7EH;完,关显示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH