博文
<007> ATmega16L 的中断源及在GCC中的中断名 [AVR](2006-09-07 12:05:00)
摘要:┌───────┬─────────────┬─────────────┐
ㄧ 中断源 ㄧ 中断定义 ㄧ 在GCC中的中断名SIG_NAME ㄧ
├───────┼─────────────┼─────────────┤
ㄧ RESET ㄧ 复位中断 ㄧ ㄧ
├───────┼─────────────┼─────────────┤
ㄧ INT0 ㄧ 外部中断请求0 ㄧ SIG_INTERRUPT0 ㄧ
├───────┼─────────────┼─────────────┤
ㄧ INT1 ㄧ 外部中断请求1 ㄧ SIG_......
<006> Flash 中的类型名 [AVR](2006-09-07 12:04:00)
摘要: 程序开头应包含头文件 <avr/pgmspace.h> 其中定义了如下几种类型
┌─────────┬─────┬────────────┐
ㄧ Flash 中的类型名 ㄧ 长度/bit ㄧ 对应于SRAM中的类型名 ㄧ
├─────────┼─────┼────────────┤
ㄧ prog_char ㄧ 8 ㄧ uint8_t ㄧ
├─────────┼─────┼────────────┤
ㄧ prog_int ㄧ 16 ㄧ int16_t ㄧ
├─────────┼─────┼────────────┤
ㄧ prog_long ㄧ 32 ㄧ int32_t ㄧ
├─────────┼─────┼────────────┤
ㄧ prog_long_long ㄧ 64 ㄧ  ......
<003> AVR单片机I/O功能配置(2006-09-07 11:59:00)
摘要: AVR单片机的I/O端口为标准双向口,每个端口对应3个寄存器,即DDRX、PORTX和PINX(X为对应端口号,如对PA口来说,X为A)。各端口功能配置如下:
┌───┬───┬───┬───┬──────────────┐
ㄧDDRXn ㄧPORTXnㄧ I/O ㄧ 上拉 ㄧ 备注 ㄧ
├───┼───┼───┼───┼──────────────┤
ㄧ 0 ㄧ 0 ㄧ 输入 ㄧ 关闭 ㄧ三态(高阻) ㄧ
├───┼───┼───┼───┼──────────────┤
ㄧ 0 ㄧ 1 ㄧ 输入 ㄧ 打开 ㄧ提供弱上拉,低电平必须由外电 ㄧ
ㄧ ㄧ ㄧ ㄧ ㄧ路拉低,PXn脚输出电流 ㄧ
├───┼───┼───┼───┼──────────────┤
ㄧ 1 ㄧ 0 ㄧ 输出 ㄧ 关闭 ㄧ三态(高阻) ......
<001> HappyAVR 实验板(2006-09-07 09:29:00)
摘要:此日志非当日发布,仅为方便查阅。
[更新] 2007.1.1
今天终于将AVR开发板的全部资料整理好了,以后AVR的实验就用它来完成了。
对网页制作有些兴趣,就专门为它制作了个业余的网站,详见我的空间 HappyAVR 。......
【019】Proteus与Keil的整合 [51](2006-08-29 21:17:00)
摘要:今天参照 电子制作2004年第10期《Proteus与Keil的整合》一文, 将Proteus与Keil结合在一起调试了一下,效果还不错。只是两个软件的界面要切换查看,虽然可以通过调整窗口大小和位置来同时观看,但感觉还是不太方便,如果能有个双头显卡来个双屏显示那就更帅了^_^
现将原文摘录如下:
Proteus是Labcenter公司出品的电路分析、实物仿真系统。它可仿真各种电路和集成IC,最让我们高兴的是它支持许多型号的单片机的仿真,另外还提供Schematic Drawing与PCB设计功能。它的元件库齐全,使用方便,是不可多得的电子电路设计辅助软件。keil是目前世界上最好的51单片机的汇编和C语言的开发工具。它支持汇编,C语言以及混合编程,同时具备功能强大的软件仿真和硬件仿真(用mon51协议,需硬件支持)功能。但是我们在利用它的仿真功能的时候都有一定的限制。如果我们把这两个软件结合来用,调试软硬件就方便多了。其实Proteus在设计的时候已经注意到和各种单片机编译程序的整合了。如它可以和Keil、MPLAB IDE等编译模拟软件结合。笔者在这里先向大家介绍Proteus怎么样和keil结合的。
首先,你要下载安装这两个软件了。Proteus可以到官方网站(http://www.labcenter.co.uk/)下载试用板(试用版无存盘功能),最新版本是6.5。Keil也可以到它的官方网站(www.keil.com)去下载它的demo板(有2K代码限制),最新的版本是7.20。下载后就可以安装了。
第二步,安装完毕,把C:\Program Files\Labcenter Electronics\Proteus 6 Professional\MODELS\目录下的 VDM51.dll文件复制到 C:\Keil\C51\BIN文件夹下。(目录名都是默认的,你可以根据你实际安装的目录进行复制。)
第三步,用记事本(其它的编辑软件也可以,如Ultra ......
【018】流水灯花样变换 [51](2006-08-27 22:27:00)
摘要:实验参考: 笨笨工作室-实验九、流水灯花样变换(中断)。(查看)
实验板: FB51A。(查看)
实验目的: 掌握在中断程序中处理多个按键动作的响应方法。
实验现象: 进入程序后,程序作双向流水灯;按下k1键,程序作左向流水灯; 按下k2按键程序作右向流水灯; 按下k3键两个亮点从两边向中间移动; 按下k3键两个亮点从中间向两边移动。
在上个实验(016中断的应用中对断点的保护)中,只用了一个按键触发中断, 而本次实验中断程序要对多个按键动作进行响应, 灯光变换的花样有4种,用4个按键k1,k2,k3,k4切换。
显示部分电路:
键盘部分电路(图中K0对应程序中K1……K3对应K4):
思路:主程序中执行左右流水灯,在中断服务程序中,首先读取按键状态,然后延时10ms,再次读取按键状态。把两次获得的按键状态比较,如果不同,就表示是抖动,退出中断;否则,就去判断是哪个按键按下。如果是k1,就执行左跑马灯;如果是k2,就执行右跑马灯;如果是k3,就执行亮点向中间移动;如果是k4,就执行亮点向两边移动。
值得注意的是: 在中断服务程序中,应该尽量的使得任务简化,不要让中断服务程序作过多复杂的任务,而要尽量把这些复杂的任务放到主程序中间去完成。
本着这一原则, 可以采用置标志位的方法。即在主程序中设定一个标志位,不断的对这个标志进行查询:如果是标志为状态1,就执行双向跑马灯;如果是状态2,就执行左向跑马灯;如果是状态3,就执行右向跑马灯,依次类推。而在中断服务程序中,只需要进行如下工作:去抖动,键识别,改变标志位。
这里我们用寄存器r0的内容作为标志,当它里面的内容是0ffh时,执行左右跑马灯程序;为01h时,执行左跑马灯;02h时执行右跑马灯;03h时执行两个亮点向中间移动;04h时执行两个亮点象两边移动。
下面是主程序和中断程序的流程图
程序如下:
org 0000h
......
【017】典型的中断服务程序 [51](2006-08-26 23:40:00)
摘要:出自《单片机原理及应用》(张毅刚)
INT: clr ea ; CPU关中断
push psw ; 现场保护
push acc
setb ea ; CPU开中断
中断处理程序段
clr ea ; CPU关中断
pop acc ; 现场恢复
pop psw
setb ea ; CPU开中断
reti ; 中断返回,恢复断点
<1> 本例现场保护假设仅仅涉及到PSW和A的内容,如果还有其他的需要保护的内容,只需要在相应的位置再加几条PUSH和POP指令即可。注意,对堆栈的操作是先进后出,次序不可颠倒。
<2> 中断服务程序中的"中断处理"程序段,应用设计者应根据中断任务的具体要求,来编写这部分中断处理程序。
<3> 如果本中断服务程......
【016】中断的应用中对断点的保护 [51](2006-08-22 20:37:00)
摘要:实验参考: 笨笨工作室-实验八、按键控制跑马灯(中断)。(查看)
实验板: FB51A。(查看)
实验目的: <1> 掌握堆栈在中断程序中的作用。
<2> 掌握让程序保护现场的方法。
实验现象: 二极管作左右跑马灯,当按下外部按键 K1 时, 8 个二极管全部闪烁 5 次后从 K1 按下之前的位置继续作跑马灯。
在应用中断时,若主程序在正常运行的过程中响应了中断就要转而去执行中断服务程序。那如何在执行完中断服务程序之后完全恢复原来的主程序呢?这就需要在执行中断服务程序之前将相关的状态保护起来,在中断完成后再将这些状态恢复,从而继续执行主程序。
51单片机中允许我们从内部 RAM 中指定一个空间专门保存这些断点处的状态,这个空间就是堆栈。并且还专门给了我们一个 8 位的堆栈指针,让我们用它来开辟堆栈空间。例如我们给堆栈指针赋值: mov sp, #70h ,就表示我们把内部数据 RAM 的地址为 70H 开始的单元设为堆栈。
MCS-51的片内存储器(RAM)共有256字节,高128字节是特殊功能寄存器,地址范围80H~FFH。这一部分可看作系统资源,不能随便利用。而剩下的低128字节区分如下:
──┬────────────┐
7FHㄧ 用户RAM区 ㄧ
ㄧ (数据缓冲区、堆栈区) ㄧ
30Hㄧ 80 byte ㄧ
──┼────────────┤
2FHㄧ 可位寻址区 ㄧ
20Hㄧ &nb......
【015】中断方式按键 [51](2006-08-09 11:47:00)
摘要:实验参考: 笨笨工作室-实验七、中断方式按键。(查看)
实验板: FB51A。(查看)
实验目的: <1> 掌握中断方式响应按键的原理。
<2> 掌握中断服务程序的具体编写:如何进行键的识别,如何去抖动。
实验现象: 最右面的数码管初始显示0,每次按下外部按键K1执行加一,计数到9时重新回0。
单片机响应外部按键的方式有两种,一种是查询方式,一种是中断方式。
查询方式:单片机不断的查询是否有按键按下,如果有按键按下的话,就执行相应的程序,否则继续查询。
中断方式:单片机处理自己的工作,如果有按键按下,向单片机发出中断请求。单片机停下现在正在处理的工作,转去执行中断程序,执行之后回来继续刚才的工作。
关于查询方式实现上述过程参见【013】查询方式按键。当单片机工作于查询方式的时,要不间断的对外部按键进行查询,其间单片机不能干其他的任何工作,CPU的大量时间可能会浪费在原地踏步的查询操作上。为进一步提高单片机的工作效率,这里采用中断方式。其过程为:单片机执行主体程序,如果有按键按下,向单片机发出中断请求,单片机就会停下现在正在处理的工作,转去执行中断处理程序,执行完后回来继续刚才的工作;如果没有按键按下,单片机就作自己的工作,不理睬外部键盘。
这里又涉及到了中断源的概念,中断源用于发出中断请求。MCS-51单片机的中断系统有5个中断请求源:2个外部中断请求INT0和INT1,2个片内定时/计数器T0和T1的计满溢出中断,还有一个是片内串行口中断请求TI或者RI。在本试验中,用外部中断INT1。
显示部分电路图:
键盘部分电路:
由图可以看到, 当任何一个按键按下的时候,P3.3引脚,即INT1上就会出现一个低电平,向单片机发出中断申请。如果单片机开放了外部中断,就响应中断请求,进入中断服务程序。单片机中断是否开放由特殊功能寄存器IE控制。在单片机内部256字节的数据RAM的高128字节(80h~ffh)是特殊功能寄存器区。PSW在这个区域,IE也在这个区域,叫做“中断允许寄存器”,专门负责程序是否响应中断的,IE的字节地址为A8H,可进行位寻址。各......