编程实例.docx
- 文档编号:14447272
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:98
- 大小:37.06KB
编程实例.docx
《编程实例.docx》由会员分享,可在线阅读,更多相关《编程实例.docx(98页珍藏版)》请在冰点文库上搜索。
编程实例
单片机编程学习资料(中)
单
片
机
编
程
赣西科技学院电子系
2010-6-1
8路跑灯
;*****************************************************************************
延时实现LED流水灯效果p1口八个灯作跑马灯。
采用了寄存器存中间数
;******************************************************************************
org0000h
ajmpstart
org0080h
start:
mova,#0ffh
clrcA
movr2,#08h;循环八次。
loop:
rlca;带进位左移。
movp1,a;输出到P1口。
calldelay;延时一段时间
djnzr2,loop;反复循环
movr2,#07h;再往回循环。
loop1:
rrca;带进位右移
movp1,a;输出到P1口。
calldelay;延时一段时间
djnzr2,loop1;反复循环
jmpstart;重新开始
delay:
movr3,#20;延时子程序
d1:
movr4,#20
d2:
movr5,#248
djnzr5,$
djnzr4,d2
djnzr3,d1
ret
end
;******************************************************************************
;中断控制的P1.1小灯。
采用12MHZ晶振。
;******************************************************************************
org0000h
ajmpmain
org000bh
ajmpint_timer0
org0080h
main:
movtmod,#01h;设置定时器工作方式寄存器。
movth0,#high(65536-50000);
movtl0,#low(65536-50000);设50MS初始值。
movie,#82h;设置中断允许寄存器
mov30h,#10;
mov31h,#6;30H和31H是两个软件计数器。
setbtr0;启动定时
ajmp$;原地踏步
int_timer0:
;定时器0中断服务程序。
movth0,#high(65536-50000);
movtl0,#low(65536-50000);重设50MS定时。
djnz30h,l1;
mov30h,#10;
djnz31h,l1;
mov31h,#6;软件计数
cplp1.1;10*6*50MS=3000MS时间到,P1.1取反
l1:
reti;中断返回
end
;******************************************************************************
;p1口8个跑马灯的另外一个程序。
用移位指令
;******************************************************************************
org0000h
ajmpmain
org0080h
main:
movp1,#00h;全亮
lcalldelay;
lcalldelay;
lcalldelay;延时一段时间
mova,#0feh;每次只亮一个灯。
loop:
movp1,a;
lcalldelay;
lcalldelay;
lcalldelay;
rla;循环左移。
ajmploop;
delay:
movr7,#00h;延时子程序
tt:
movr6,#00h
djnzr6,$
djnzr7,tt
ret
end
;******************************************************************************
;*p1口八个灯作3路跑马灯。
分别往端口送三个不同的数,理解数字和端口的对应关系
;******************************************************************************
ORG0000H;
LJMPMAIN;
ORG0080H;
MAIN:
MOVP1,#0DBH;11011011--零为亮
ACALLDELay;
MOVP1,#06DH;01101101
ACALLDELay;
MOVP1,#0B6H;10110110
ACALLDELay;
AJMPMAIN;
delay:
movr7,#255;延时子程序
d1:
movr6,#255
d2:
djnzr6,d2
djnzr7,d1
ret
end
;******************************************************************************
;*P0---8个LED和P2---8个LED硬件:
8路指示灯接P0口,或者P2口
;******************************************************************************
ORG0000H
JMPMAIN
ORG0080H
;************************************************
MAIN:
MOVA,#0FEH;赋初始值
LOOP:
MOVR0,#07H;移动次数
LOOPL:
MOVP0,A
MOVP2,A
RLA;左移
CALLDELAY
DJNZR0,LOOPL
MOVR0,#07H;移动次数
LOOPR:
MOVP0,A
MOVP2,A
RRA;右移
CALLDELAY
DJNZR0,LOOPR
JMPLOOP
;************************************************
DELAY:
MOVR6,#0FFH
DEL:
MOVR7,#0FFH
DJNZR7,$
DJNZR6,DEL
RET
END
;******************************************************************************
延时实现p1口八路LED流水灯效果(用循环移位指令)
;******************************************************************************
ORG0000H
LJMPMAIN
ORG0080H
MAIN:
MOVP1,#0FEH;初始点亮LED1
MOVR7,#0FEH;保存P1
MAIN_LP:
LCALLDELAY;延时
MOVA,R7;
RLA;循环移位
MOVR7,A;保存到R7
MOVP1,A;点亮下一个LED
JMPMAIN_LP;不停循环
;===========================================================
DELAY:
;延时子程序
MOVR0,#0FFH
MOVR1,#0FFH
DLY_LP:
NOP
NOP
DJNZR0,DLY_LP
MOVR0,#0FFH
DJNZR1,DLY_LP
RET
END
;******************************************************************************
;P1口的8个灯循环亮,按P32后全部闪烁5次后继续循环亮,中断程序的典型应用。
;*****************************************************************************
org00h;开始
jmpstart
org03h;int0中断入口(p32)
jmpext0;到中断子程序
org0080h
start:
movie,#10000001b;中断使能
movip,#00000001b;中断优先
movtcon,#0000000b;中断为电平触发
movsp,#70h;堆栈指针
loop:
mova,#0ffh;左移动初值
clrc;C=0
movr2,#08;左移动8次
loop1:
rlca;含c左移动一位
movp1,a;输出到P1口
calldelay;延时
djnzr2,loop1;左移动8次了吗?
movr2,#07;设定右移7次
loop2:
rrca
movp1,a
calldelay
djnzr2,loop2;右移动7次了吗?
jmploop
ext0:
pushacc;把a压入堆栈
pushpsw;保存现场
setbrs0;设定工作寄存器1
clrrs1
mova,#00;使P1全亮一次
movr2,#10;闪烁5次(亮灭共10次,小心了)
loop3:
movp1,a;输出到P1
calldelay
cpla
djnzr2,loop3;10次到了么?
没有继续否则完成
poppsw;恢复现场
popacc
reti
delay:
movr5,#20;延时200MS
d1:
movr6,#20
d2:
movr7,#250
djnzr7,$
djnzr6,d2
djnzr5,d1
ret
end
;******************************************************************************
;端口测试,轮流点亮所有io端口的发光管,用于测试*
;******************************************************************************
org0000h
ajmploop
org0080h
loop:
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp1.0
……
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp1.7
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp3.0
……
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp3.7
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp2.0
……
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp2.7
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp0.7
……
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
clrp0.0
lcalldelay
movp0,#0ffh
movp1,#0ffh
movp2,#0ffh
movp3,#0ffh
AJMPLOOP
delay:
movr5,#20;延时。
d1:
movr6,#40
d2:
movr7,#248
djnzr7,$
djnzr6,d2
djnzr5,d1
ret
end
;*****************************************************************************
;*P0---8个LED和P2---8个LED硬件:
8路指示灯接P0口,或者P2口
;******************************************************************************
ORG0000H
JMPMAIN
ORG0080H
MAIN:
MOVSP,#60H
MOVP0,#0FFH
MOVP2,#0FFH
MOVR0,#00H
MAIN1:
MOVA,R0;取数地址送A
MOVDPTR,#TABLE_P0;查表取数
MOVCA,@A+DPTR
MOVP0,A;送P0显示
MOVA,R0
MOVDPTR,#TABLE_P2;查表取数
MOVCA,@A+DPTR
MOVP2,A;送P2显示
INCR0;取数地址加1
CALLDELAY
CJNER0,#90,MAIN1
MOVR0,#00H
JMPMAIN1
;*********************************************************
DELAY:
;延时子程序
MOVR5,#01
DEL1:
MOVR6,#250
DEL2:
MOVR7,#248
DJNZR7,$
DJNZR6,DEL2
DJNZR5,DEL1
RET
;*********************************************************
TABLE_P0:
……
TABLE_P2:
……
;*********************************************************
END
;******************************************************************************
;*十字路口红绿灯控制器
;*第一个状态:
主干道、支干道均亮红灯5S*
;*第二个状态:
主干道亮绿灯30S、支干道亮红灯*
;*第三个状态:
主干道绿灯闪3次转亮黄灯、支干道亮红灯3S*
;*第四个状态:
主干道亮红灯、支干道亮绿灯25S*
;*第五个状态:
主干道亮红灯、支干道绿灯闪3次转亮黄灯3S*
;*返回到第二个状态*
;******************************************************************************
RED_ZHUBITP0.0
YELLOW_ZHUBITP0.1
GREEN_ZHUBITP0.2
RED_ZHIBITP0.4
YELLOW_ZHIBITP0.5
GREEN_ZHIBITP0.6
;*********************************************************
ORG0000H
JMPMAIN
ORG0080H
;*********************************************************
MAIN:
MOVSP,#60H
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
CLRRED_ZHU;第一个状态
CLRRED_ZHI
MOVR5,#10;延时5S
D_TIME1:
CALLDELAY
DJNZR5,D_TIME1
MAIN1:
SETBRED_ZHU;第二个状态
CLRGREEN_ZHU
CLRRED_ZHI
MOVR5,#60
D_TIME2:
CALLDELAY;延时30S
DJNZR5,D_TIME2
MOVR4,#06H
GREEN_ZHU_FLASH:
CPLGREEN_ZHU;第三个状态
CALLDELAY
DJNZR4,GREEN_ZHU_FLASH
SETBGREEN_ZHU
SETBRED_ZHU
CLRYELLOW_ZHU
MOVR5,#6;延时3S
D_TIME3:
CALLDELAY
DJNZR5,D_TIME3
CLRRED_ZHU;第四个状态
SETBYELLOW_ZHU
SETBGREEN_ZHU
SETBRED_ZHI
CLRGREEN_ZHI
MOVR5,#50;延时25S
D_TIME4:
CALLDELAY
DJNZR5,D_TIME4
MOVR4,#06H
GREEN_ZHI_FLASH:
CPLGREEN_ZHI;第五个状态
CALLDELAY
DJNZR4,GREEN_ZHI_FLASH
SETBGREEN_ZHI
SETBRED_ZHI
CLRYELLOW_ZHI
MOVR5,#6;延时3S
D_TIME5:
CALLDELAY
DJNZR5,D_TIME5
SETBYELLOW_ZHI
JMPMAIN1
;*********************************************************
;500MS延时子程序
;*********************************************************
DELAY:
MOVR6,#230
DEL1:
MOVR7,#250
DEL2:
NOP
NOP
NOP
NOP
NOP
NOP
DJNZR7,DEL2
DJNZR6,DEL1
RET
END
;******************************************************************************
;开机8个灯循环,按p32后暂停,小喇叭响,松开继续循环,中断的典型应用。
*
;硬件连接:
p1口8路指示灯,喇叭p3.3,按键p3.2*
;******************************************************************************
org00h;开始
jmpstart;跳到主程序
org03h;int0中断入口(p32)
jmpext0;到中断子程序
start:
movie,#10000001b;中断使能
movip,#00000001b;中断优先
movtcon,#0000000b;中断为电平触发
movsp,#70h;堆栈指针
org0043h
main:
;主程序循环点亮
movp1,#00h;全亮
lcalldelay;延时一段时间
mova,#0feh;每次只亮一个灯。
loop:
movp1,a;输出到p1
lcalldelay;延时
rla;循环左移。
ajmploop;跳转main继续循环
ext0:
pushacc;(把A的值压入堆栈,保存A)
pushpsw;(保存现场)
cplp3.3;小喇叭响
calldeL;小喇叭响的速率
poppsw;恢复现场
popacc
reti
delay:
movr5,#20;延时子程序1闪烁灯调用
d1:
movr6,#20
d2:
movr7,#250
djnzr7,$
djnzr6,d2
djnzr5,d1
ret
del:
;延时子程序2小喇叭调用
movr4,#250
djnzr4,$
ret
end
;/******************************************************************************
;*标题:
xl系列单片机实验仪演示程序PWM控制LED灯渐亮渐灭程序
;******************************************************************************
----------------------------
PWMEQU7FH;PWM赋初始值
OUTEQUP0;8个LED灯的接口
INCKEYEQUP1.4;K1,PWM值增加键。
DECKEYEQUP1.5;K2,PWM值减小键。
BEEPEQUP3.7
;----------------------------
ORG0000H
SJMPSTART
ORG000BH
SJMPINTT0
ORG001BH
SJMPINTT1
ORG0043H
;----------------------------
;主程序
;定时器0工作在模式1,定时器1工作在模式2。
;----------------------------
START:
MOVSP,#30H
MOVTMOD,#21H
MOVTH1,PWM;脉宽调节
MOVTL1,#00H
MOVTH0,#0FCH;1ms延时常数
MOVTL0,#066
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 实例