这里有专门的一个
定义特殊功能寄存器的位变量。
bit和sbit都是C51扩展的变量类型。
典型应用是:sbit P0_0=P0^0;//即定义P0_0为P0口的第1位,以便进行位操作。
利用异或操作取位,进行,,,,,,
在设置定时器的时候发现下列的代码
THO = (65536 - 5000)/256;//赋值高8位
TLO = (65536 - 5000)%256;//赋值低8位
你说这与直接将65536 - 5000 赋予寄存器 有什么区别,这样有什么好处?怎么有种脱了裤子放屁的感觉,----后来了解到原来是两个8位寄存器合成的,怪不得要分别赋值。
//产生 3:1的脉冲 灯亮1s 熄灭3s 交替相间
#include // 包含51单片机寄存器定义的头文件
unsigned int beforeFlag = 0,afterFlag = 0;
sbit Signal = P1^1;
void beforeHalf(void) interrupt 1 using 1
{
beforeFlag++;
TR1 = 1;//open oppsite
TR0 = 0;// close myself
TL0 = 0x06;//250 us
}
void afterHalf(void) interrupt 3 using 2 //这里的中断号不能乱写哦,0-4..。后面都是空的没用
{
afterFlag++;
TR0 = 1;//open oppsite
TR1 = 0;// close myself
TH0 = 0x06;//250 us
}
void main(void)
{
Signal = 1;
TMOD = 0x03;//我们在这里使用两个定时器形如TMOD = 0x11并不可行。这样的话,中断从未被激活。调试器里的statue 一直增加,(本子上)》》》?????
EA = 1;
ET0 = 1;
ET1 = 1;
TH0 = 0x6;
TL0 = 0x6;
TR0 = 1;
TR1 = 1;//这两句赋值后 TL和TH会发生改变 (因为是片内定时,所以一打开便开始计时)
while(1){
if(beforeFlag == 12000)//3s
{
Signal = ~Signal;//在这里我们发现使用Signal = 0;然后下面的使用 Signal = 1并不可行,调试发现一个beforeFlag++的定时器 一直都未关过(虽然上面有关的语句TR1 = 0;),这是为什么呢?(本子上测试通过,用的是3版本的)
beforeFlag = 0;
}
if(afterFlag == 4000)//1s
{
Signal = ~Signal;
afterFlag = 0;
}
}
return ;
}
关键字:51单片机 寄存器 位变量
引用地址:
学习51单片机有感
推荐阅读最新更新时间:2024-03-16 14:56
51单片机玩转物联网基础篇05-控制继电器
前言 本节我们开始学习如何使用51单片机控制继电器,有了继电器,我们可以使用单片机输出的低电平控制高电平期间工作,比如继电器接到220V用电器上,可通过单片机智能控制用电器。 一、基础知识 1.继电器简介 继电器是具有隔离功能的自动开关元件,实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用,广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电子设备中,是最重要的控制元件之一,继电器可以分为很多种,本实验使用光耦隔离继电器,实物图如下: 2.继电器控制原理 继电器原理图如下所示: 从上图可知,给继电器模块供电后,红色LED灯就会被点亮,当给IO引脚输入底电平后,单片
[单片机]
51单片机【一】背景 计时器
单片机(Microcontrollers)MCU 是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。 这些是度娘上找到的 简单点说就是微型 廉价的逻辑电路 来控制我们身边许许多多的带电的东西 单片就是单个硅晶片 嵌入其他系统属于简单 低级的嵌入式系统。嵌入式指的是嵌入产品中 狭义的
[单片机]
IAR环境定义位变量标志位 STM8 MSP430通用
首先建立一个公共点H文件,加入通用代码如下 typedef union { struct { unsigned char b0:1; unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; } bits; } UINT8_VAL; 通用定义联合体写好以后,要定义一个只占用个Byte的标志位的话,只要定义一下uchar型字节,然后
[单片机]
51单片机最小系统的制作
因准备电子设计竞赛的需要重新制作了一套51单片机最小系统,现给出电路图和实物图供大家参考。 系统电路图如下,包括系统电源部分、89S52最小电路、ISP在线下载部分。实物与电路图稍有不同,仅供参考,有问题可在下面留言。 51单片机最小系统实物图: ISP下载线实物图:
[单片机]
基于51单片机的车用数字仪表设计与实现
引言 --- 车辆仪表是驾驶员与汽车进行信息交流的重要接口和界面,是车辆安全行驶的重要保证。随着电子技术的广泛应用,传统汽车仪表逐渐被微处理器为核心的电子控制数字仪表取代已成为必然趋势。然而,目前国内车辆仪表数字化水平还不高,绝大部分仪表还是模拟式的,而大多数模拟仪表表头的体积较大、数量多,使得显示系统拥挤不堪,影响美观;另外一些模拟仪表故障率高,增加了用户的经济负担,减小了车辆行使的安全系数。 --- 为克服这些缺点,文中提出用51单片机、模/数转换器件ADC0809及霍尔开关及数字式温度传感器DS18B20等对其进行技术改进,设计并实现了新型全数字仪表系统,该仪表系统有显示直观准确、灵敏度高、使用寿命长、灵巧美观、成本低
[单片机]
51单片机数码管的动态显示
/******************************************* * 本节实验,需要加深理解锁存器,位选线, * 段选线等,以及防止重影的方法;和keil中数 * 组的定义; *另外想让8个数码管同时显示不同的数字, *靠的是程序的快速运行,和人眼的短时间缓冲原理实现的 *本例的延时设定是1ms,可以分别用100ms *等尝试一下 ******************************************/ #include reg52.h #define uchar unsigned char #define uint unsigned int
[单片机]
任务3:直接应用寄存器点亮LED
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍直接应用寄存器点亮LED的方法。 一、单片机控制LED发光的基本方法 二、应用PORTC寄存器控制LED闪烁 //加入包含文件 #include ../include.h //定义系统常量 //定义全局变量 //主程序 int main(void) { //定义局部变量 //目标板初始化,该函数会自动初始化相应的外设文件 TARGET_Init(); //初始化全局变量 //在上电时,执行的相应操作 DDRC = 0xFF
[单片机]
80C51单片机对压力测量控制系统的设计
1 引言 目前我国发展煤炭生产机械化发展迅速。综采设备的应用,是提高效率、改善安全状况的措施。 影响开机率的一个主要因素是支架对工作面的顶板控制的好坏,因此,对综采工作面进行矿压监测与控制是很有必要的。要做到这一点,首先需要对井下工作面的液压支架的实际工作状况进行监测,通过对检测数据处理、分析,评定其效果,并采取相应措施,以提高开机率、提高产量。本文以监测综采液压支架的压力为研究内容,开发了一套基于单片机的压力测量控制系统。 2 压力测量控制系统功能设计 压力测量控制系统用于监测支架压力, 每台测量控制系统配有四只传感器, 可分别通过高压油管连接支架的立柱、平衡千斤顶, 前探梁千斤顶的油压腔。压力测量控制系统接收到通讯测量
[单片机]