单片机实验程序

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

>>

标签:, ,

相关日志


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.

Leave a Reply