实验原理:
送给二极管一个高电平(逻辑1)时,灯亮;当输入为低电平(逻辑0)时,灯灭。但是人眼能够分辨的亮光必须超过20ms,假使二极管灭的时间也为20ms,则频率为25Hz。
另:在51单片机中可以直接将一个立即数用mov指令由P1口送出。为了增加P1口的驱动,我们使用一片245的驱动芯片以增加P1口的驱动力。245有两种芯片:一种是74LS245,另一种是74HC245。一个是低功耗(LS)一个是高速(COMS)形的,即一个是TTL形的,一个是COMS型的。一般的规则都是能用LS坚决不用HC,因为HC这样的COMS电路尽管他高速,但是一般都会带来较高的噪声。
实验内容:
编写一程序,达到一下要求:(L0~L7均为发光二极管)
- L0、L1闪烁5次,其余不闪烁,频率1Hz
- L2、L3闪烁5次,其余不闪烁,频率1Hz
- L4、L5闪烁5次,其余不闪烁,频率1Hz
- L6、L7闪烁5次,其余不闪烁,频率1Hz
- L0、L1、L2、L3闪烁5次,其余不闪烁,频率1Hz
- L4、L5、L6、L7闪烁5次,其余不闪烁,频率1Hz
- L0~L7全部闪烁5次,频率1Hz
- 重复以上步骤
程序:
AST: DB 03H,0CH,30H,C0H,0FH,F0H,FFH ;建表 MAIN: MOV DPTR,#AST ;将表格的放入DPTR MOV R4,#00H ;将R4作为指针 L1: MOV A,R4 ;将指针位置赋给累加器A MOVX A,@A+DPTR ;将((A)+(DPTR))的值放到累加器A中 ACALL FLASH ;调用子函数FLASH INC R4 ;R4指针指向下个数字 CJNE R4,#7,L1 ;若R4-7不为零,跳到L1 SJMP MAIN ;跳到主函数,实现循环 FLASH: MOV R0,#05H ;实现闪烁的次数 L2: MOV P1,A ;(A)->P1口输出,实现二极管亮一次 ACALL DELAY ;调用子延时函数DELAY MOV P1,#00 ;00->P1口输出,实现二极管灭一次 ACALL DELAY ;调用子延时函数DELAY DJNZ R0,LOOP ;如果R0不为零,跳到L2 RET ;跳出子函数 DELAY: MOV R1,#250 ;延时程序开始,机器周期1 DELAY0: MOV R2,#249 ;机器周期1 DELAY1: NOP ;机器周期1 NOP ;机器周期1 DJNZ R1,DELAY1 ;机器周期2 DJNZ R0,DELAY0 ;机器周期2 RET ;机器周期1
延时程序的机器周期为:
T=Tcy×[(1+1+2)×249+1+2]×250+1+1=499502μs≈0.5s
其中Tcy为每个机器周期的时间Tcy=12/fsoc(晶振周期)=2μs
版权声明:本文内容来源于网络搜集无法获知原创作者,仅供个人学习用途,若侵犯到您的权益请联系我们及时删除。邮箱:1370723259@qq.com