中断是停止当前正执行的任务,转而去执行中断任务,等中断任务执行结束后继续回来执行当前正在运行的任务。中断程序要求尽可能的简洁越短越好(尤其是在多中断任务执行时),中断首先要开启中断源,初始化中断,然后响应中断,从中断的入口地址处执行中断程序。
利用中断可以使程序执行效率高效,实现“一边。。。一边。。。”初始化中断源后主程序,就可以去干其他事情了。好比你一边洗衣服一边等电水壶水开一样:
先给电水壶装满水插上电源,然后去洗衣服,当水开鸣笛时,停下洗衣服去倒开水;然后装满冷水,继续烧水,再接着洗衣服等水开,倒水,装水,洗衣服。。。。重复这个循环。
而延时仅仅是主程序在执行的过程中不断调用的一段子程序。例如我们使用51单片机编写程序如下:
//主程序不断的调用延时程序DELAY,等待定时器T0产生定时中断
//芯片使用STC89C52单片机,工作于12T,12M晶振。
ORG0000H
LJMP START //系统复位入口地址
ORG000BH
LJMP T0_INTERRPUT //T0中断子程序入口地址
ORG0030H //程序开始处
START:
MOV TMOD,#01H //定时器工作在16位定时模式
MOV TH0,#(65535-50000) / 255 //t0赋初值
MOV TL0,#(65535-50000) MOD 255
SETB TR0//启动定时器T0
SETB ET0//允许T0中断
SETB EA //开启系统总中断
LOOP:
LCALL DELAY //调用延时程序
SJMP LOOP
//主程序到此结束
//延时10MS
DELAY:
MOV R5,#20
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET //子程序返回
//t0定时中断子程序
//定时50ms
T0_INTERRPUT :
PUSH ACC //保护断点-入栈
PUSH PSW
PUSH DPH
PUSH DPL
MOV TH0,#(65536-50000) / 256//再次装如t0初值
MOV TL0,#(65536-50000) MOD 256
POP DPL//弹出断点,先进后出
POP DPH
POP PSW
POP ACC
RETI //中断返回
END
我开始学单片机时,在图书馆借了好几本单片机硬件方面的书籍,你说就一本嘛,它也不全面,所以多看几本,加上我也买过书,不懂也看,就会理解的……常到书店狂狂,就会找到你所需要的《例说51单片机C语言》等等
最后我也给楼主介绍个我自己收藏的网址:http://www.51c51.com
(《十天学会单片机和C语言编程》郭天祥老师教程)
http://xidong.net/File001/File_54834.html
你说最好是能做出来东西的,你首先得弄清楚你做的东西是干什么,各个元件实现的功能是什么,单片机中和程序你得看得懂,所以,先把单片机该掌握的理论掌握好,在做东西也不迟