单片机一个引脚输入高低电平,怎么编写C51程序处理信号?

我用的是C8051F530A单片机,其中一个引脚接一个振动传感器,有振动时,引脚输入高电平;没有振动,引脚出于低电平,怎么编写C51程序处理高电平信号呢?最好有些参考程序,能有好心人帮编写程序更好。
图中,传感器相当于一个闭合开关,有振动则传感器断路,输入引脚高电平;没振动,传感器闭合,输入引脚低电平。
有好答案提高分数奖励。

我用的是C8051F530A单片机,其中一个引脚接一个振动传感器,有振动时,引脚输入高电平;没有振动,引脚出于低电平,怎么编写C51程序处理高电平信号呢?最好有些参考程序,能有好心人帮编写程序更好。
有好答案提高分数奖励。

高分不高分倒是小事,我干白忙乎的事太多了。C8051F530A单片机由于有交叉开关,得知道你用哪个IO管脚检测这个输入信号才好给出参考程序,还有你没指出用C还是汇编编程。
前面没看到你的图,步骤大概如下:
MOV P0MDIN,#0FFH ;端口0输入方式配置寄存器,全部数字输入
MOV P0MDOUT,#00H ;端口0输出方式配置寄存器,全部开漏
MOV P0SKIP,#0FFH ;端口0跳过寄存器,全部跳过
MOV P0,#0FFH ;

MOV XBR0,#00H ;端口I/O 交叉开关控制0
MOV XBR1,#40H ;端口I/O 交叉开关控制1追问

我是个 菜鸟,51单片机还没怎么搞明白呢,手头正在摸索C8051F530A单片机,做一个安防报警器,好愁人啊,用的是C语言程序,我的初步信号处理方法是这样的,【事件1:高电平的宽度(也就是持续时间)需要超过预设的值】在预设的时间窗内(也就是一定的时间内),事件1发生的次数超过预设的次数,就产生报警。
知道您擅长汇编,我想擅长汇编的工程师一定擅长C语言,或者我把汇编嵌入C51程序中。

追答

报警信号也是高低电平控制吧?高电平报警还是低电平报警?你最好也贴个图上来。
还有,有没有中文数据手册?

另外,【事件1:高电平的宽度(也就是持续时间)需要超过预设的值】
持续时间是多少?允许误差是多少?
在预设的时间窗内(也就是一定的时间内)
时间窗是多长时间?

追问

高电平报警,这个振动报警器很简单的,

有振动,球会跳起,引脚输入高电平报警。

高电平的宽度(持续时间)先设为50ms,允许误差要求不超过1ms(相对50ms挺小就行),时间窗是5s,事件1发生次数超过3次报警。

追答

给你个程序框架,监测和控制部分(都在定时中断函数内)你自己加。

//假设晶振12MHZ
#include "C8051F530.h"
unsigned int MSJS=0;毫秒计时器
unsigned int ZDJS=0;振动次数计数器
unsigned int TIME=0;时间窗计时器
sbit input=P0^3;信号输入
sbit input=P0^7;报警输出
void main(void)
{
P0MDIN=0XFF;//端口0输入方式配置寄存器,全部不配置为模拟输入
P0MDOUT=0X80;//端口0输出方式配置寄存器,D7推挽,其余开漏
P0SKIP=0XFF;//端口0跳过寄存器,全部跳过
P0=0X7F;
XBR0=0X00;//端口I/O 交叉开关控制0
XBR1=0X40;//端口I/O 交叉开关控制1

TMOD |= 0X10; //定时器1工作于方式1,16位定时器
TH1 = 0XFE; //定时器1定时时间=500uS
TL1 = 0X0C;
ET1 = 1; //使能定时器1中断
EA =1; //开总中断

while(1)
{
}
}

void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组
{
TH1 = 0XFE; //定时器1定时时间=500uS
TL1 = 0X0C;

}

温馨提示:内容为网友见解,仅供参考
无其他回答

单片机一个引脚输入高低电平,怎么编写C51程序处理信号?
前面没看到你的图,步骤大概如下:MOV P0MDIN,#0FFH;端口0输入方式配置寄存器,全部数字输入 MOV P0MDOUT,#00H;端口0输出方式配置寄存器,全部开漏 MOV P0SKIP,#0FFH;端口0跳过寄存器,全部跳过 MOV P0,#0FFH;MOV XBR0,#00H;端口I\/O 交叉开关控制0 MOV XBR1,#40H;端口I\/O 交叉开关控制1 ...

用C51编程实现:当P1.0输入为高电平时,P1.2输出控制信号灯点亮?
程序的原理是,首先将P1口设置为输入口,将所有引脚都设置为高阻状态。然后在一个无限循环中,通过判断P1.0引脚是否为高电平,来控制P1.2引脚的输出状态。如果P1.0引脚为高电平,则将P1.2引脚设置为高电平,点亮控制信号灯;否则,将P1.2引脚清零,熄灭控制信号灯。

51单片机 如何检测某个引脚是否为高低电平 求一个C源程序实例
LED=1; \/\/此时LED不亮,说明这个引脚是高电平。 delayms(1000); LED=0; \/\/此时LED亮,说明这个引脚是低电平。 delayms(1000); }}你若想单纯的去检测正在运行单片机的IO口的电平状态的话,直接用LED接到该IO口观察LED的状态即可。如果事先知道该IO口的电平时固定的,拿更好办了,直接用万用表测。 maoarchy ...

怎么让单片机输出低电平是电压为1V,高电平为4V,同一个IO口的,C51
当IN端为低电平时,D1截止,2号线电压为 1.05V,经电压跟随器,OUT端可输出约1V电压 当IN端为高电平时,D1导通,经过D1管压降,2号线电压为 4.1V,经电压跟随器,OUT端可输出约4V电压 这个电路优点是驱动能力很强,电压也稳定

c51单片机怎样读引脚
首先 你要知道对于单片机的管脚在系统上电复位的情况下 各个管脚都是高电平的 所以不用你写P1.0也是1,这时候你可以先让P1.0=0再重新写1。读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。inc P0;给p0加1 执行这个语句时 ,采用“读-...

如何编写51单片机音乐程序
T=65536-N=65536-Fi\/2\/Fr。例:设K=65536,F=1000000=Fi=1 MHZ。求低音DO(26HZ),中音DO(523HZ),高音DO(1046HZ)的记数值。每个音符使用1个音节,字节的高四位代表音符的高低,低四位代表音符的节拍。如果1拍为0.4秒,1\/4拍为0.1秒,假设1\/4拍为 DELAY,则1拍为4 DELAY。

c51流水灯单片机程序
\/\/假设有8个LED通过上拉电阻接到P1端口, 高电平灯灭,低电平灯亮,逐个循环点亮 include <reg51.h> unsigned char data tab1[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};void delay(){ unsigned int data n;for (n=0;n<40000;n++){ ;} } void main(){ unsigned char...

急!C51单片机I\/O口默认高电平问题!!!
1. 在C51单片机中,P0、P1、P2、P3端口的寄存器地址分别为0x80、0x90、0xA0、0xB0。这些地址指的是端口寄存器的地址,并非端口的默认高电平或低电平值。2. 如果发光二极管(LED)是高电平驱动的,当P0口输出值为0xFF(二进制为11111111)时,LED会亮起。然而,这个值不是直接从头文件中获得的,...

51单片机键盘输入的数据要存储在一个数组里面,用C51怎么写?
例如:P1是按键,arr[4]4个数值 arr[0]=P1;后面同。

设单片机系统如何编写一个完整的C51程序使P1.6和P1?
设单片机系统编写一个完整的C51程序使P1.6和P1,可以使用正确编码加上解压即可。 一、过程: 1、TMOD = 0X02;\/\/工作方式寄存器; 2、TH0 = 56;\/\/8位的用TH; 3、TL0 = 0;\/\/16位跟13位两个都用; 4、EA = 1;\/\/开总中断; 5、TR0 = 1;\/\/定时器开始计数,return。 二、单片机简介: 1、单片机...

相似回答