标题:
初学单片机需要注意的一些问题
[打印本页]
作者:
liuyang
时间:
2012-1-2 04:40
标题:
初学单片机需要注意的一些问题
最近学的东西整理下,也好便于自己再更深入的了解或系统的把握。
流水灯:
p1^6直接接74HC573的片选端上的,当它输出高电平,那么直接对P0口进行写入操作,74HC573会把相应的饿数据送到流水灯上,从而实现对流水灯的控制。
p1|=~(1<<6); p1&=(1<<6);
英特尔总线:
很简单的,数据总线与地址总线的复用,通过设置WR与RD来进行锁存,先打开74HC573的片选端输入P2与P016位的地址总线,然后在进行锁存然后在打开片选端,晕死忘了,我看下时序图 写错了是先送数据然后锁存,在通过P0与P2 送出16位地址到+WR完成写入操作,读出就是反下。
蜂鸣器:
这个接在P0^3端口上的。当74HC138D的Y1口与WR输出低电平通过或非门打开74HC573的片选端应许写入操作,在P0^3上输出高电平,蜂鸣器就会发出响声。
P2=0x88(P2通过Y1可以推出A11、A15为1其他为0则P2=10001000B);p3&=~(1<<6); 打开片选端 P0=(1<<3);
这个可以看作外设的IO口,刚看了下突然明白了,送出个0x8800地址再送出数据P0=(1<<3); 简单的写即:XBYTE[0x8800]=(1<<3);
继电器:
类似蜂鸣器只是端口是P0^2。注意的是:原理图中可以看到必须把74HC537接地,即拨上蜂鸣器开关。
中断分查询中断与中断服务
查询中断是占CPU的因为代码是写在主函数中的,中断服务是不占的,只有产生中断的时候,程序才会进入到设定的中断服务程序中。没什么好写的,主要是写个循环不断的判断某个输出端是否置位。
按键消抖,是通过延时10mS判断按键是否仍是存在然后用while(KEY_DOWN);按键释放时才做操作。
中断服务,这个稍微有点麻烦,ROM烧录好的不可更改的程序中存放着向量中断表,它指向了中断服务的入口函数的地址空间,当产生中断原时,程序自动会在表中相应的编号找到入口函数的地址,把 该地址送到指针寄存器中,然后程序就直接跳转进入到用户设定的中断服务程序中。
void cl() interrupt 编号 函数名随便起,我自写成自己的名字
假设开中断0 : 主函数中加入以下代码 EX0 =1;开中断0 IF=1 设置边降沿,EA=1;开全局中断
定时器:
也2中方式,只是多了个对TMOD的操作来设置寄存器的位数等社者。
一般模式: 查询: TMOD=0x01; 设置16位的 假设开中断0 开始设置初直比如1ms 那么 TH0=(65535-24/12M*1ms)>>8;其中M和ms要换算的然后左移 获得高8位 TH0=(65535-20000)<<8; TL0=(65535-20000)&0xff; 然后开定时器TR=1;就可以了。然后不断判断TF==1益处手动清0赋初直。
中断服务: 多2部开定时中断EX0=1与全局中断EA=1;
本人遗留的问题:写了个定时器0与中断0的服务,用来接受按键来控制流水灯循环点亮的速度,发现中断0服务老是无法进入,换成中断1就可以。该问题目前仍未解决。
数码管:
挺麻烦的,一般是扫描的方式通过视觉残留来显示数字的。数码管分共阴与共阳,共阳要加3机管实现的,通过输入高电平导通位片选端。具体写下来还真不好写,首先要测试出每个段 对应哪个输出端,然后再通过这个表来计算你要显示的数字的8位2机制数,然后在写个循环轮流选种位片选端把相应的数值输入。具体代码模式不写了,这个我自己知道就可以了。
初步只学到这,花了我一个礼拜多的时间了,才开个头,后面的简单看了下简直不在一个层次上的,日的....
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1