摘要: 我有学习板上独立按键共有8个,可以把它做为一个输入端口的8位控制。按下时输出0,松开时输出1,下面是用按键控制一个LED的亮灭,按下时亮,松开时灭。#include sbit LED = P0^2; sbit KEY = P0^0; // 注意输入要使用P0或P3,这两个口同时支持输入和输出void main(){ while(1) { if (KEY == 0) // 按下 LED = 0; else // 松开 LED = 1; //LED = KEY; ... 阅读全文
posted @ 2014-03-15 22:57 彩蛋 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 定时器的几种工作方式中,除0和前面的1类似都需要初始化计数值,然后开始计数,计数溢出后,需要再次控制计数的初值,但工作模式2不同于此,工作方式2将THx和TLx分开处理,将初值存放在THx中,计数时只处理TLx的8位,所以计数最大值为2^8=256,方式2的另一个特点是,当计数溢出后,不需要控制初值,而是会自动将THx中的值做为计数初值重新开始计数。用工作方式2,实现1s延时程序如下:查询方式#include sbit LED = P0^2;unsigned int vT = 0;void main(){ LED = 0; // 初始亮灯 TMOD = 0x02; ... 阅读全文
posted @ 2014-03-15 22:43 彩蛋 阅读(6757) 评论(0) 推荐(1) 编辑
摘要: 中断方式比较特殊,需要使用单片机内部的中断处理机制,同时指定中断函数。#include sbit LED = P0^2;unsigned int vT = 0;void main(){ LED = 0; TMOD = 0x01; TH0 = 0x3C; // 计数初值3CB0H = 15536 (65536-15536=50000 * 1us = 50ms) TL0 = 0xB0; ET0 = 1; // EA即IE^1 等于1时申请中断定时器0中断打开 EA = 1; // 总中断打开 TR0 = 1; /... 阅读全文
posted @ 2014-03-15 22:01 彩蛋 阅读(1610) 评论(0) 推荐(0) 编辑
摘要: 以查询控制器的控制位状态来实现1s定时。#include sbit LED = P0^2; unsigned int vT = 0;void main (){ LED = 0; // 点亮 TMOD = 0x01; // 定时模式1 16位定时计数器 TR0 = 1; // 启动定时器0 TH0 = 0x3C; // 计数初值 15536 (65536-15536=50000 * 1us = 50ms) TL0 = 0xB0; while(1) { if (TF0 ==... 阅读全文
posted @ 2014-03-15 14:01 彩蛋 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 上一节,稀里糊涂地照着demo测试了定时计数的效果,但对内部和参数的控制还是不解,准备从基础原理学习定时计数器的工作原理和方式。8051单片机的结构是由一内部总线连接各功能模块,通过特殊功能寄存器(SFR)集中控制,不同型号引脚定义和SFR定义不同,因此一个功能模块,可以从相关引脚功能和相关SFR功能学习了解该模块。以8051为例,其定时计数模块的特点有2个16位定时计数器,最大计数范围:0H-FFFFH;相关的SFR:TMOD、TCON、TH0、TL0、TH1、TL1;相关引脚:T0、T1、INT0、INT1;4种工作方式;其中,T0、T1做为计数脉冲输入,定时方式时不用,作I/O用,对应P 阅读全文
posted @ 2014-03-15 12:33 彩蛋 阅读(754) 评论(0) 推荐(0) 编辑