程序编写和程序调试
软件简单规划后,就需要具体的编写,将任务分解后,每部分已经比较简单了,调试时可以考虑各子程序单独调试,人为模拟输入各种情况下的数据及状态,检查输出是否正确。再将相关联的一起调试。除非很有把握,不要将程序全编写完了再调试,那样就不知道到底哪里有问题。
程序简单题纲如下:
;定义常量,某些固定的值,多次用到或经常修改的常量,单独定义后调用。
buz_l0 equ 50d ;50*4=200ms设置所有默认蜂鸣器鸣叫声音长度。
sw_t0 equ 70d ;有效按键响应时间,按键去抖动时间
。。。。。。
;定义I/O,将各输入/输出单独按功能或原理图网络标号定义,当原理图修改时方便软件修改
buz_p equ pa.3
grill_p equ pc.0
micro_p equ pc.1
......
;定义变量,
run_state equ [40h] ;或则用自动变量定义
......
;程序开始
org 0h
jmp start_l
org 04H ;外部中断向量
jmp int_set ;跳转过零中断处理程序
org 08H ;定时中断向量,中断周期为250us
mov temp_a,a ;保存
mov a,status
mov temp_s,a
inc t_int0 ;每次中断0.25us
mov a,temp_s
mov status,a
mov a,temp_a
reti
;中断处理程序,注意先保存用到的ACC和标志寄存器status,返回前恢复
int_set:
......;中断处理程序,设置风扇输出
reti
;主程序开始
start_l:
;初始化RAM、I/O、timer、中断等,一般先将通用RAM全清零
;注意继电器等关键变量的初始化,否则上电时继电器可能会跳一下。
;初始化某些特殊变量
;主循环程序部分
main:
call sw_in_set ;注意按键设置会将显示关闭,则显示输出程序在后
call dsp_out_set ;显示扫描程序
call sw_out_set ;按键功能及状态设置
call ad_tem_set ;A/D转换及温度计算
call dsp_state_set ;显示状态计算
main_delay_2ms:
mov a,t_int0 ;0.25*8=2 等待2ms时间到
sub a,8
snz c
jmp main_delay_2ms
call sw_in_set ;注意按键设置会将显示关闭,则显示输出程序在后
call dsp_out_set ;调用显示扫描程序
call heat_out _set ;调用加热状态及功率设置
call buz_set ;调用蜂鸣器设置子程序
call time_set
main_delay_4ms:
mov a,t_int0 ;0.25ms*16=4ms 等待4ms时间到
sub a,16
snz c
jmp main_delay_2ms
clr t_int0
jmp main
;各子程序分列后面
sw_in_set: ;按键检测、编码开关检测、门状态检测
......
ret
dsp_out_set: ;显示扫描程序
......
ret
sw_out_set: ;按键功能及状态设置
......
ret
ad_tem_set: ;A/D转换及温度计算
......
ret
dsp_state_set: ;显示状态计算
......
ret
heat_out _set: ;调用加热状态及功率设置
......
ret
buz_set: ;蜂鸣器设置子程序
......
ret
time_set: ;时间及定时处理程序
......
ret
;程序中会用到很多表,为调用方便,则将其放到最后页面
org 0f00h
dsp_code_l0:
dc 10011111b;0
......
end ;程序结束
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

