单片机实验程序
05月 29th, 2008
实验1 数据排序实验
一、实验目的:熟悉mcs-96指令系统,掌握程序设计方法。
二、实验内容:编写并调试一个排序子程序,其功能为用冒泡法将内部ram中几个单字节内容按从大到小的次序重新排列。
三、程序设计步骤:(1)从第一个数开始,依次把相邻的两个数进行比较,即第(n-2)个数与第(n-1)个数比较,第(n-1)个数与第n个数比较等等;若第(n-1)个数不大于第n个数,则两者交换,否则不交换,直到n个数的相邻两个数都比较完为止。此时,n个数中的最小数将被排在n个数的最后。(2)对剩下的(n-1)个数重复第(1)步,找到(n-1)个数中的最小数。(3)重复第(2)步,直到n个数全部排序好为止。
四、实验步骤:把8096/196中4000~400fh地址单元中放入不等的数据,运行本实验程序后检查4000~400fh地址单元中内容是否按从大到小排列。在和pc机联机时,用连续单步方式,可很清楚地看出数据排序时数据移动变化情况。
五、思考:编一程序把4000~400fh地址单元中内容按小到大排列。
程序:
cseg at 2080h
ld ax,#4000h
ldb cl,#0fh
loop1:ldb bl,[ax]
ldb bh,1[ax]
cmpb bh,bl
jnh noexchange
xchb bh,bl
noexchange:;无需交换
stb bl,[ax]
stb bh,1[ax]
add ax,#0001h
djnz cl,loop1
ld ax,#4000h
ldb cl,#0fh
djnz cl,loop1
lp:jmp lp
end
实验2 定时器t2定时控制实验
1、 实验目的:掌握用t2定时器的基本方法和编程。
2、 实验内容:用插针将p1.0与l0相连,运行程序后,观察发光二极管闪亮时间间隔,用t2定时器实现每1秒亮、1秒暗,2秒亮、2秒暗,3秒亮、3秒暗的时间间隔。
3、 实验预备知识:80c196kc的t2溢出中断可用来定时。相关中断屏蔽,ioc控制寄存器,中断允许,中断向量,中断程序格式。需要设置成内部时钟方式(80c196kc,晶振频率6mhz)。
4、 实验步骤:把80196的p1.0接l0。编制程序,使p1.0电平变化,高电平时l0点亮,低电平时l0熄灭。
程序:
rseg at 24h
n0 equ 24h
n1 equ 25h
n2 equ 26h
n3 equ 27h
n4 equ 28h
n5 equ 29h
n7 equ 30h
cseg at 2038h
dcw t_over
cseg at 2080h
main:ld sp,#0f0h ;18h
ldb wsr,#01h
ldb ioc3,#00000001b ;0ch
ldb wsr,#0h
ldb ioc1,#00001000b ;16h
;ldb ioc2,#00000010b
ldb int_mask1,#00010000b;08h
ldb n0,#00h
ldb n1,#01h
ldb n2,#02h
ldb n3,#03h
ldb n4,#04h
ldb n5,#05h
ldb n7,#00h
ldb al,#0ah
ldb bl,#14h
ldb cl,#1eh
ld t2,#28035d;0ch
ldb ioport1,#00h
nop
nop
ei
loop:sjmp loop
t_over: pushf
ld t2,#28035d
cmpb n0,n7
je loop0
cmpb n1,n7
je loop1
cmpb n2,n7
je loop2
cmpb n3,n7
je loop3
cmpb n4,n7
je loop4
cmpb n5,n7
je loop5
loop0:ldb ioport1,#01h;0fh
djnz al,back
incb n7
ldb al,#0ah
loop1:ldb ioport1,#00h
djnz al,back
incb n7
loop2:ldb ioport1,#01h
djnz bl,back
incb n7
ldb bl,#14h
loop3:ldb ioport1,#00h
djnz bl,back
incb n7
loop4:ldb ioport1,#01h
djnz cl,back
incb n7
ldb cl,#1eh
loop5:ldb ioport1,#00h
djnz cl,back
clrb n7
sjmp main
back:popf
ret
end
实验3 六项数据满中断方式his脉冲宽度检测实验
1、 实验目的:学习his的使用方法
2、 实验内容:hsi.1与p1.1相连。p1.1模拟方波输出,5ms<周期<50ms,占空比50%。his.1输入口,正负跳变。测得高电平宽度后转存到4000h首地址单元。结束后p1.0输出高电平,l1灯亮。
3、 实验预备知识:his定义为输入线,可用作高速输入信号检测。相关ios,ioc,his中断,中断屏蔽。
4、 实验步骤:用插针将his.1与p1.1相连,p1.0连l1。运行程序后,输出四个周期,在首地址4000h单元里观察宽度。
程序:
cseg at 24h
up_time equ 24h
down_time equ 26h
width equ 28h
flag equ 30h
n1 equ 32h
n2 equ 34h
m equ 36h
org 2004h
dcw wait
cseg at 2080h
clrb flag
clrb width
clrb m
ldb n1,#5000d
ldb n2,#04h
ldb m,#0h
ld ax,#4000h
ld sp,#0f0h
ldb ioport0,#00h
reflush:ld 0,hso_time
nop
nop
jbs ios1,7,reflush
ldb hsi_mode,#00000100b
ldb int_mask,#00000100b
ldb ioc1,#0
ei
ldb ioc0,#00000100b
loop1:ldb ioport1,#02h
nop
nop
inc m
cmp n1,m
jne loop1
clr m
loop2:ldb ioport1,#00h
nop
nop
inc m
cmp n1,m
jne loop2
wait:pushf
jbs hsi_status,3,up
jbs flag,0,down
ld 0,hso_time
return:popf
ret
up:jbc hsi_status,3,return
ld up_time,hso_time
ldb flag,#01h
sjmp return
down:jbs flag,0,return
ld down_time,hso_time
sub width,down_time,up_time
stb width,[ax]
add ax,#02h
clr flag
djnz n2,loop1
ldb ioport0,#01h
loop:sjmp loop
end
实验4 水位过限报警实验
1、实验目的:学习单片机内部a/d转换
2、预备知识:参阅80c196kc a/d转换部分。p0口双功能输入线,定义成ad输入口。软件定时器。
3、实验内容:软件定时器50ms由p0.0查询测得直流模拟电压信号(电压1v对应2.0m,5v对应10.0m),并折算出实际水位与定值4030h单元内容(单位:m)进行比较,如果大于定值,则转换ad值存至4000h首地址单元,电压值(单位:10mv)存在4010h地址字中。实际水为值(单位:0.1m)存在4020h地址字中。然后启动报警,l1,l2每2s交替亮灭。
4、实验接线图:p1.0,p1.1和l1,l2连接,p0.0与电位器输出连接。
5、实验步骤:运行前将电位器输出旋至低电平。执行程序后,缓慢将电位器输出旋至高电平。l1,l2灯亮后看结果。
程序:
org 28h
adexchan:dsl 1
adexchanl equ adexchan
adexchanh equ adexchanl+2
vol equ 32h
water equ 34h
ad equ 36h
flag equ 38h
n1 equ 40h
n2 equ 42h
n3 equ 44h
light equ 46h
width equ 48h
adno equ 50h
adnol equ 52h
exch equ 54h
ad_result_lo equ ad_result
ad_result_hi equ ad_result+1
org 200ah
dcw change
org 2080h
ld sp,#0f0h
clrb int_pend
ldb int_mask,#20h
clr dx
ldb dl,#50h
ld cx,#4030h
st dl,[cx]
clrb flag
;ldb flag,#01h
ldb ad_command,#08h
ld n2,#40d
clrb n1
clr n3
>>
标签:结构化程序设计, .net 框架程序设计, ajax程序设计相关日志
This entry was posted on 星期四, 05月 29th, 2008 at 10:36 am and is filed under 程序设计. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.