发布日期:2024-04-29 10:05:14 更新时间:2024-11-22 02:57:00 浏览次数:1880
1、这个是定时器0的中断函数。 ,interrupt——中断。 3、定时器设置初值并开后,当计数器计数到你设置的数后,就会产生一个定时器中断,然后无论你当时程序在运行什么代码,都会跳转到IsrTimer0这个函数运行,运行完毕后再跳回去执行之前的代码。 using 1这个写法不能变,函数名是也要这样写的。 扩展资料 定时器的适用范围及注意事项 适用范围 1、在实行峰谷电价差的地区,可使用大功率电器在低电价阶段自动运行。 2、用于控制需定时开与关的家用电器。如:饮水机、热水器、空调、电饭煲、广告照明等。 3、用于控制通电时间长短。如:电动自行车电池、电池、蓄电池的充电。 4、需频繁通断的用电场合。如花圃、草坪的间歇喷灌、鱼缸的周期性增氧过滤、喷泉等。 5、家庭防盗系统的自动控制。 注意事项 1、本产品所接电器功率总和不得超过额定功率,为室内干燥环境中使用。 2、本产品可循环工作,设置的程序可循环使用。 3、不可把本产品直接插入已运行中的电器上。 4、当电器用品接入定时器后,开关状态务必是开启状态。 5、保修期内请勿擅自拆卸定时器,一旦拆卸,将终止保修。需维修时请找专业电工或专业人士。 参考资料:百科定时器 可以参考下面的理解: 1、这个是定时器0的中断函数。 ,interrupt——中断。 3、定时器设置初值并开后,当计数器计数到用户设置的数后,就会产生一个定时器中断,然后无论你当时程序在运行什么代码,都会跳转到IsrTimer0这个函数运行,运行完毕后再跳回去执行之前的代码。 using 1这个写法不能变,函数名是也要这样写的。 扩展资料: 单片机定时器介绍 定时/计数器T位的专用寄存器组成,即定时/计数器T组成,T组成。 此外,其内部还有和T启动或停止计数,同时包含定时/计数器的状态。 TF1:定时器1溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除。或用软件清除。 TF0:定时器0溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除,或用软件清除。 参考资料:百科单片机 这是按照单片机的中断向量顺序编的,也是缺省状态下的优先级。 外部中断0 interrupt 0 定时器0 interrupt 1 外部中断1 interrupt 2 定时器1 interrupt 3 串口中断 interrupt 4 定时器2 interrupt 5 后面的using1 就是在中断器里工作寄存器Rn使用第1工作区 工作寄存器共有决定 RS1 RS0 对应H 对应FH 对应H~H 对应H~1FH interrupt 是中断 interrupt 0 外部中断0 interrupt 2 外部中断1 interrupt 3 定时器1中断 interrupt 4 串口中断 using ~ R7来使用 H 第一组 FH 第二组 H ~ H 第三组 H ~ 1FH 第四组 interrupt 指中断声明 后面的数字代表中断源 using 1指工作寄存器组
/********************************************************************
* 文件名 :
* 描述 : 该文件实现了用温度传感器件DSB对温度的采集,并在数码管上显示出来。
* 创建人 : 东流,月日
* 版本 :
***********************************************************************/
#include<>
#define uchar unsigned char
#define uint unsigned int
#define jump_ROM 0xCC
#define start
#define read_EEROM 0xBE
sbit DQ = P数据口
unsigned char TMPH,TMPL;
uchar code table[] = {xb,xd,xf,0x6f};
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间大概为US。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay_1()
{
int i,j;
for(i=0; i<=; i)
for(j=0; j<=2; j)
;
}
/********************************************************************
* 名称 : delay()
* 功能 : 延时函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay(uint N)
{
int i;
for(i=0; i
#include<> void main() { char a[4]=; int i,j,k; char space= ; for(i=0;i<4;i) { printf(\n); printf( ); for(j=1;j<=i;j) printf(%c,space); for(k=0;k<4;k) printf(%c,a[k]); } printf(\n); }
#include <>
#include <> //Keil library (is used for _nop()_ operation)
#include <> //Keil library
#include <> //Keil library
unsigned char Tem,Hum;
unsigned char Set_Tem,Set_Hum;
sbit SS = P1^0; //片选
sbit SCLK = P 时钟
sbit MOSI = P1^2; //数据输入
sbit MISO = P1^3; //数据输出
sbit LED = P1^7; //指示灯
sbit ISD_INT = P3^2; //中断
sbit AN = P1^6; //执行
sbit STOP = P1^5; //复位
sbit PR = P 录音 PR=0 放音
sbit DATA=P2^0;
sbit SCK=P2^1;
sbit SCL=P1^1;
sbit SDA=P1^0;
#define TEMP 0
#define HUMI 1
typedef union
{ unsigned int i;
float f;
} value;
//enum {,EMP,HUMI};
//以上所示为系统的主程序结构,其中子程序可根据系统整个具体的要进行添加代码,
//刷新LED显示子程序write_led();硬件采用译码器;按键检测子程序check_key();的执行通过读单片机I/O口高低电平识别按键。
//以下所示代码为读温湿度传感器子程序read_ senr()的程序内容:
/********************************************************************
工程名 SHTxx demo program ()
文件名:
MCU: family
编译器: Keil ersion
*******************************************************************/
//
// modulvar
//
void warning(void);
void Delay(unsigned int time);
#define noACK 0
#define ACK 1
unsigned int *p_value;
#define STATUS_REG_W
#define STATUS_REG_R
#define MEASURE_TEMP
#define MEASURE_HUMI
#define RESET 0
//
char s_write_byte(unsigned char value)
//
// 写一个字节eaa,检查应答信
{
unsigned char idata i,error=0;
for (i=;i/=2)
{ if (i & value) DATA=1;
else DATA=0;
SCK=1;
_nop_();_nop_();_nop_(); //时钟脉冲宽度 5 us
SCK=0;
}
DATA=1; //释放DATA
SCK=1; //9个CLK后应答
error=DATA; //检查应答信 (DATA 被拉低)
SCK=0;
return error; // 如果没有应答则error=1
}//
//
char s_read_byte(unsigned char ack)
//
// 读一个字节,检查应答信
{
unsigned char i,val=0;
DATA=1; //释放DATA信
for (i=;i/=2)
{ SCK=1;
if (DATA) val=(val | i);
SCK=0;
}
DATA=!ack; //如果 ack==1 ,拉低DATA
SCK=1; //clk #9 for ack
_nop_();_nop_();_nop_(); //延时5秒
SCK=0;
DATA=1; //释放DATA
return val;
}
//
void s_transstart(void)
//
// generates a transmission start
// _____ ________
// DATA: |_______|
// ___ ___
// SCK : ___| |___| |______
{
DATA=1; SCK=0; //初始状态
_nop_();
SCK=1;
_nop_();
DATA=0;
_nop_();
SCK=0;
_nop_();_nop_();_nop_();
SCK=1;
_nop_();
DATA=1;
_nop_();
SCK=0;
}
//
void s_connectionreset(void)
//
//通讯复位: 至少在9 SCK 周期后,DATA=1 传输开始
// _____________________________________________________
// DATA: //|_______|
// _ _ _ _ _ _ _ _ _ ___ ___
// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___|
{
unsigned char i;
DATA=1; SCK=0; //初始状态
for(i= SCK周期
{ SCK=1;
SCK=0;
}
s_transstart(); //通讯开始
}
//
char s_ftreset(void)
// resets the senr by a ftreset
{
unsigned char error=0;
s_connectionreset(); //复位通讯
error=s_write_byte(RESET); //发送复位命令
return error; //如果传感器没有响应则error=1
}
//
char s_read_statusreg(unsigned char *p_value,unsigned *p_checksum)
//
//读效验寄存器状态 (8bit)
{
unsigned char error=0;
s_transstart(); //通讯开始
error=s_write_byte(STATUS_REG_R); //发送命令
*p_value=s_read_byte(ACK); //读状态寄存器(8bit)
*p_checksum=s_read_byte(noACK); //读效验和
return error; //如果传感器没有响应则error=1
}
//
char s_write_statusreg(unsigned char *p_value)
//
// writes the status register with checksum (8bit)
{
unsigned char error=0;
s_transstart(); //通讯开始
error=s_write_byte(STATUS_REG_W);// 发送命令
error=s_write_byte(*p_value); //发送状态寄存器的值
return error; //如果传感器没有响应则error=1
}
//
char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
//
// makes a measurement (humidity/temperature) with checksum
{
unsigned char idata error=0;
unsigned int i;
s_transstart(); //通讯开始
switch(mode)
{ //发送名令
case TEMP : error=s_write_byte(MEASURE_TEMP); break;
case HUMI : error=s_write_byte(MEASURE_HUMI); break;
default : break;
}
for (i=) break; //等待传感器完成测量
if(DATA) error=1;
*(p_value) =s_read_byte(ACK); //读取第一个字节
*(p_value1)=s_read_byte(ACK); //读取第二个字节
*p_checksum =s_read_byte(noACK); //读取效验和
return error;
}
//
//
void calc_sth(float *p_humidity ,float *p_temperature)
//
// 计算温度和湿度
// input : humi [Ticks] ( bit)
// temp [Ticks] ( bit)
// output: humi [%RH]
// temp
{ const float xdata C1=;
const float xdata C2=;
const float xdata C3=;
const float xdata T1=;
const float xdata T2=;
float rh=*p_humidity; //计算湿度值
float t=*p_temperature; // 计算温度值
float rh_lin;
float rh_true;
float t_C;
t_C=t* ;
rh_lin=C;
rh_true=(t_C*rh)rh_lin;
if(rh_true>)rh_true=; //如果结果超出了可能的范围就取消
if(rh_true<)rh_true=;
*p_temperature=t_C;
*p_humidity=rh_true;
}
//
float calc_dewpoint(float h,float t)
//
// calculates dew point
// input: humid,ty , temperature
// output: dew point
{ float dew_point,logEx;
logEx=*t/()(log(h)2);
dew_point = (logEx )*();
return dew_point;
}
//
void main_measure()
//
// 使用SHT功能步骤:
//
// 2. 测量温度,湿度
// 3. 计算温度,湿度
// . 显示温度,湿度
{ value humi_val,temp_val;
float dew_point,error;
unsigned char checksum;
unsigned int idata i;
s_connectionreset();
while(1)
{ error=0;
error=s_measure((unsigned char*) &); //测量湿度
error=s_measure((unsigned char*) &); //测量温度
if(error!=0) s_connectionreset();
//如果有错误就复位
else
{ (float); //将整数转换成浮点数
(float);
calc_sth(&);
//计算温度,湿度
dew_point=calc_dewpoint();
//计算dew
//printf(temp:% humi:% dew point:%,\n,temp_v,,);
}
for (i=;i);//
}
}
//语音功能子程序
//下面代码为语音芯片使用范例,该功能放在主程序中的warning()子程序中执行。
void delay(unsigned int time) //延迟 n 秒
{
while(time!=0)
{
time ;
}
}
void delayms(unsigned int time) //延迟 n 毫秒
{
TMOD=;
for(time;time>0;time)
{
TH0 = 0xfc;
TL0 = 0x;
TR0 = 1;
while(TF0!=1)
{;}
TF0=0;
TR0=0;
}
}
//************************************
//ISD 位数据
//************************************
void spi_send(unsigned char isdx)
{
unsigned char idata k;
SS=,开 spi 通信端
SCLK=0;
for(k=0;k<8;k) //先发低位再发高位,依发送。 { i
{
if((isdx&)
MOSI=1;
else
MOSI=0;
isdx=isdx>>1;
SCLK=1;
delay(2);
SCLK=0;
delay(2);
}
}
//*******************************
//发送 stop 指令
//*******************************
void isd_stop(void)
{
delay();
spi_send();
SS=1;
delayms();
}
//*******************************
//发送上电指令,并延迟 ms
//*******************************
void isd_pu(void)
{ delay();
SS=0;
spi_send();
SS=1;
delayms();
}
//发送掉电指令,并延迟 ms
//*******************************
void isd_pd(void)
{
delay();
spi_send(0x);
SS=1;
delayms();
}
//*******************************
//发送 play 指令
//*******************************
void isd_play(void)
{
LED=0;
spi_send(0xf0);
SS=1;
}
//*******************************
//发送 rec 指令
//*******************************
void isd_rec(void)
{
LED=0;
spi_send(0xb0);
SS=1;
}
//*******************************
//发送 setplay 指令
//*******************************
void isd_setplay(unsigned char adl,unsigned char adh)
{
spi_send(adl); //发送放音起始地址低位
adh=adh||0xe0;
spi_send(adh); //发送放音起始地址高位
SS=1;
}
//*******************************
//发送 setrec 指令
//*******************************
void isd_setrec(unsigned char adl,unsigned char adh)
{
spi_send(adl); //发送放音起始地址低位
adh=adh||0xa0;
spi_send(adh); //发送放音起始地址高位
SS=1;
}
//************************************
//芯片溢出,LED 闪烁提醒停止录音
//************************************
void isd_overflow(void)
{
while(AN==0)
{
LED=1;
delayms();
LED=0;
delayms();
}
}
//************************************
//检查芯片是否溢出(读,OF,并返回 OF 值)
//************************************
unsigned char chk_isdovf(void)
{
SS=0;
delay(2);
SCLK=0;
delay(2);
SCLK=1;
SCLK=0;
delay(2);
if (MISO==1)
{
SCLK=0;
SS =1; //关闭 spi 通信端
isd_stop(); //发送 stop 指令
return
}
else
{
SCLK=0;
SS =1; //关闭 spi 通信端
isd_stop(); //发送 stop 指令
return
}
}
//**********************************************************************
//主程序
//功能:,按住 AN 键,LED 点亮开始录音,松开 AN 即可停止录音
// 再次按下 AN 键,LED 点亮开始录第二段音,依次类推,直到芯片溢出。
// 按 stop 键芯片复位
// ,按一下 AN 键,即播放一段语音。按 stop 键芯片复位。
//************************************************************************
void voice(void)
{
unsigned char ovflog;
while(1)
{
P=P3=0xff; //初始化
while (AN==1) //等待 AN 键按下
{
if (AN==0) //按键防抖动
{delayms();}
}
isd_pu(); // AN 键按下,ISD 上电并延迟 ms
isd_pd();
isd_pu();
if (PR==1) //如果 PR=1 则转入录音部分
{
delayms(); //延迟录音
isd_setrec(xh 地址的 setplay 指令
do
{
isd_rec(); //发送 rec 指令
while(AN==0) //等待录音完毕
{
if (ISD_INT==0)//如果芯片溢出,进行 LED 闪烁提示,
isd_overflow(); //如果取消录音(松开AN键)则停止录音,芯片复位
}
if (ISD_INT==0)
break;
LED=1; //录音完毕,LED 熄灭
isd_stop(); //发送停止命令
while(AN==1) //如果 AN 再次按下,开始录制下一段语音
{
if(STOP==0) //如果按下 STOP 按键,则芯片复位
break;
if (AN==0)
delayms();
}
}while(AN==0);
}
else //如果 PR==0 则转入放音部分
{
while(AN==0){;}
isd_setplay(x 地址开始放音
do
{
isd_play(); //发送放音指令
delay();
while(ISD_INT==1) //等待放音完毕的 EOM 中断信
{;}
LED=1;
isd_stop(); //放音完毕,发送 stop 指令
if (ovflog=chk_isdovf())//检查芯片是否溢出,如溢出则停止放音,芯片复位
break;
while(AN==1) //等待 AN 键再次按下
{
if (STOP==0)
break;
if(AN==0)
delayms();
}
}while(AN==0); // AN 键再次按下,播放下一段语音
}
isd_stop();
isd_pd();
}
}
#define ZLG
#define RADR
#define uchar unsigned char
#define uint unsigned int
/************************************/
void I2cStart(void)
{
SDA=1;
SCL=1;
Delay();
SDA=0;
Delay();
SCL=0;
}
/************************************/
void I2cStop(void)
{
SDA=0;
SCL=1;
Delay();
SDA=1;
Delay();
SCL=0;
}
/************************************/
void WriteI2cByte(uchar dat)
{
uchar k;
SCL=0;
for (k=0;k<8;k)
{
SDA=(bit)(dat&);
SCL=1;
Delay();
SCL=0;
dat<<=1;
}
SCL=0;
}
/*************************************/
uchar ReadI2cByte(void)
{
uchar dat,k;
for (k=0;k<8;k)
{
SCL=0;
SDA=1; //一定要将SDA置为高电平,否则不能正常连续取数据
Delay();
SCL=1;
dat<<=1;
if (SDA)
dat|=;
SCL=0;
Delay();
}
SCL=0;
return dat;
}
/*************************************/
void SendAck(void)
{
SDA=0;
Delay();
SCL=1;
Delay();
SCL=0;
}
/*************************************/
void SendNoAck(void)
{
SDA=1;
SCL=1;
Delay();
SCL=0;
}
/************************************/
void I2cWaitAck(void)
{
uchar ack;
SDA=1;
SCL=1;
Delay();
ack=SDA;
SCL=0;
}
/***********************************************************/
void I2cReadSequence(uchar sla,uchar sbua,uchar *s,uchar len)
{
uchar l;
I2cStart();
WriteI2cByte(sla);
I2cWaitAck();
WriteI2cByte(sbua);
I2cWaitAck();
I2cStart();
WriteI2cByte(sla1);
I2cWaitAck();
for (l=0;l
MCUDSB,测温控制继电器开合电源即可 说的也太不详细了。系统要有功能要才行哦! 这个我会做。我的腾讯,两五两八 四九 两三两。注明来意。 我可以做仿真,实物,论文,程序。
展开全部 ORG H ; 上电 & 复位 入口地址 LJMP START ; 一般为 转向主程序 ORG 中断向量入口地址 LJMP INT_0 ; 转向外部 INT0 中断 程序 ORG H ; 程序从这里开始 START: SETB EA ; 开总中断 SETB IT,外部中断0为下降沿触发方式 SETB EX0 ; 开外部 INT0 中断 A_D: MO DPTR,#H MO A, #H MOX @DPTR, A ; ( DPTR) = A , 即地址 H SJMP A_D ; 转移至地址 为 A_D 处 INT_0: MOX A, @DPTR ; A = ( DPTR) 此处为 INT0 入口 处 MO R7, A ; R7 = A RETI ; 中断返回 END ; 程序结束 以上程序 并没有什么意义
家电维修知识是现代家庭不可或缺的一部分。掌握基本的维修技巧,可以帮助我们快速解决家电故障,减少不必要的开支。
了解家电设备的分类,如电视机、冰箱、洗衣机、空调等,有助于针对不同设备进行维修操作。
您给我们信任,我们给您惊喜。
本文将介绍一些学家电维修的常识知识点,以帮助读者更好地维护和使用家电设备。
发布日期: 2024-11-22 02:57:00