|
| 请同志赐教interrupt 1 using 0 在这里是什么意思啊 |
| 新闻出处:21ic
发布时间: 2007-09-25 |
fengyeu 发布于 2007-9-19 7:59:00 void t0(void) interrupt 1 using 0 //定时中断服务函数 { TH0=(65536-50000)/256; //对TH0 TL0赋值 TL0=(65536-50000)%256; //重装计数初值 tcnt++; //每过250ust tcnt加一 if(tcnt==20) //计满20次(1秒)时 { tcnt=0; //重新再计 sec++; write=1; //1秒写一次24C08 if(sec==100) //定时100秒,在从零开始计时 { sec=0; } } }
fengyeu 发布于 2007-9-19 20:44:00 我猜也是 但是头文件里怎么没有定义呢?
农民讲习所 发布于 2007-9-19 20:48:00 可以是using 1....,就是不能加using 0
fengyeu 发布于 2007-9-19 21:15:00 #include <AT89X52.H> #include <stdio.h> #include <absacc.h> unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07, 0x7f,0x6f,}; unsigned char sec; //定义计数值,每过1秒,sec加1 unsigned int tcnt; //定时中断次数 bit write=0; //写24C08的标志; sbit gewei=P2^0; //个位选通定义 sbit shiwei=P2^1; //十位选通定义 /////////24C08读写驱动程序//////////////////// sbit scl=P3^4; //24c08 SCL sbit sda=P3^5; //24c08 SDA void delay1(unsigned char x) { unsigned int i; for(i=0;i<x;i++); ;} void flash() { ; ; } void x24c08_init() //24c08初始化子程序 {scl=1; flash(); sda=1; flash();} void start() //启动I2C总线 {sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();} void stop() //停止I2C总线 {sda=0; flash(); scl=1; flash(); sda=1; flash();} void writex(unsigned char j) //写一个字节 { unsigned char i,temp; temp=j; for (i=0;i<8;i++) {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();} scl=0; flash(); sda=1; flash(); } unsigned char readx() //读一个字节 { unsigned char i,j,k=0; scl=0; flash(); sda=1; for (i=0;i<8;i++) { flash(); scl=1; flash(); if (sda==1) j=1; else j=0; k=(k<<1)|j; scl=0;} flash(); return(k); } void clock() //I2C总线时钟 { unsigned char i=0; scl=1; flash(); while ((sda==1)&&(i<255))i++; scl=0; flash(); } ////////从24c02的地址address中读取一个字节数据///// unsigned char x24c08_read(unsigned char address) { unsigned char i; start(); writex(0xa0); clock(); writex(address); clock(); start(); writex(0xa1); clock(); i=readx(); stop(); delay1(10); return(i); } //////向24c02的address地址中写入一字节数据info///// void x24c08_write(unsigned char address,unsigned char info) { EA=0; start(); writex(0xa0); clock(); writex(address); clock(); writex(info); clock(); stop(); EA=1; delay1(50); } /////////////24C08读写驱动程序完///////////////////// void Delay(unsigned int tc) //延时程序 { while( tc != 0 ) {unsigned int i; for(i=0; i<100; i++); tc--;} } void LED() //LED显示函数 { shiwei=0; P0=table[sec/10]; Delay(8); shiwei=1; gewei=0; P0=table[sec%10]; Delay(5); gewei=1; } void t0(void) interrupt 1 using 0 //定时中断服务函数 { TH0=(65536-50000)/256; //对TH0 TL0赋值 TL0=(65536-50000)%256; //重装计数初值 tcnt++; //每过250ust tcnt加一 if(tcnt==20) //计满20次(1秒)时 { tcnt=0; //重新再计 sec++; write=1; //1秒写一次24C08 if(sec==100) //定时100秒,在从零开始计时 {sec=0;} } } void main(void) { TMOD=0x01; //定时器工作在方式1 ET0=1; EA=1; x24c08_init(); //初始化24C08 sec=x24c08_read(2);//读出保存的数据赋于sec TH0=(65536-50000)/256; //对TH0 TL0赋值 TL0=(65536-50000)%256; //使定时器0.05秒中断一次 TR0=1; //开始计时 while(1) { LED(); if(write==1) //判断计时器是否计时一秒 { write=0; //清零 x24c08_write(2,sec); //在24c08的地址2中写入数据sec } } }
fengyeu 发布于 2007-9-19 21:17:00 interrupt 1 using 0 我看了一个上午还不明白????????????
《利用24C08 断电以后存储的数据不消失的特点,可以做一个断电保护装置。 首先利用单片机做一个0-99 秒的自动计时器。然后随机关断电源,在通电以 后计时器接着断电前的状态继续计时〉
fengyeu 发布于 2007-9-19 21:24:00 C:0x0116 AD0A MOV R5,sec(0x0A) C:0x0118 7F02 MOV R7,#0x02 C:0x011A 1201CB LCALL x24c08_write(C:01CB) 185: } C:0x011D 80EF SJMP C:010E 69: unsigned char readx() //读一个字节 70: { 71: unsigned char i,j,k=0; C:0x011F E4 CLR A C:0x0120 FE MOV R6,A 72: scl=0; C:0x0121 C2B4 CLR scl(0xB0.4) 73: flash();
fengyeu 发布于 2007-9-19 21:27:00 C:0x00C7 22 RET 152: void t0(void) interrupt 1 using 0 //定时中断服务函数 153: { C:0x00C8 C0E0 PUSH ACC(0xE0) C:0x00CA C0D0 PUSH PSW(0xD0) 154: TH0=(65536-50000)/256; //对TH0 TL0赋值 C:0x00CC 758C3C MOV TH0(0x8C),#0x3C 155: TL0=(65536-50000)%256; //重装计数初值
fengyeu 发布于 2007-9-19 21:39:00 终于找到了!不知对不对,奇怪C书上好想没有那么写的吧?
C51中断处理过程
C51编译器支持在C源程序中直接开发中断过程,因此减轻了使用汇编语言的繁琐工作,提高了开发效率。中断服务函数的完整语法如下:
void 函数名(void)[模式] [再入]interrupt n [using r]
其中n(0~31)代表中断号。C51编译器允许32个中断,具体使用哪个中断由80C51系列的芯片决定。r(0~3)代表第r组寄存器。在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。"再入"用于说明中断处理函数有无"再入"能力。C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。这种支持能使编程者创建高效的中断服务程序,用户只须在C语言下关心中断和必要的寄存器组切换操作。
fengyeu 发布于 2007-9-20 8:05:00 ??????????
computer00 发布于 2007-9-20 9:46:00 这个是keil所特有的,普通的C没有。
fengyeu 发布于 2007-9-20 18:12:00 还是OO好人,有些人只会打击人家。以后自己也会受打击的 还是OO好人,有些人只会打击人家。以后自己也会受打击的
ayb_ice 发布于 2007-9-21 9:10:00 否则程序乱了还不知是什么回事...
cpu_0dgree 发布于 2007-9-24 10:18:00 前几天也碰到这样的问题, 小弟当时也不明白怎么回事
xc_cz 发布于 2007-9-24 15:53:00 精神可佳,但是从你问的问题和问问题的方式来看,基础还是不行。。
gyt 发布于 2007-9-25 9:58:00 13楼ayb_ice是好意,没有讽刺你的意思在里面
|
| 【关闭】 【打印】 |
|
|
|
|