大佬教程收集整理的这篇文章主要介绍了8051 c中断,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我正在做的就是向用户发送一个句子并让他们通过串口回答是或否,我使用了串行中断.那部分工作正常.如果我从那个人那里得到一个no,我想通过定时器中断产生5kHz的方波.我希望这个方波由外部中断控制,当P3.2引脚上的外部中断打开或关闭时,它会打开和关闭.
这是我的所有代码
#include <REG52.H> #include <stdio.h> sbit WAVE = P1 ^ 7; #define BIT(X) (1 << (X)) void timer0() interrupt 1 // timer is controlling square wave timer 0 { WAVE = ~WAVE; } void interrupt0() interrupt 0 { IE ^= BIT(1); } void serial0() interrupt 4 { unsigned char x; unsigned int i,z; unsigned char yes[] = " YES "; unsigned char no[] = " NO "; unsigned char nvalid[] = " NOT VALID TRY AGAIN "; while (RI == 1) { x = SBUF; RI = 0; if (z < 1) { if (x == 'n') { for (i = 0; i < 4; i++) { SBUF = no[i]; while (TI == 0) ; //wait for transmit TI = 0; z++; } } } else { return; } if (x == 'y') { for (i = 0; i < 5; i++) { SBUF = yes[i]; while (TI == 0) ; TI = 0; } } else if (x != 'n') { for (i = 0; i < 21; i++) { SBUF = nvalid[i]; while (TI == 0) ; TI = 0; } } TI = 0; return; } } void main() { TMOD = 0x20; TH1 = 0xF6; //baud rate SCON = 0x50; TH0 = 0xA4; IE = 0x93; //enablE interrupts IP = 0x10; // propriety to serial interrupt TR1 = 1; //start timer 1 TR0 = 1; //clear timer 0 TI = 1; printf("Hello,Are you okay? Press y for yes and n for no "); while (1) ; }
void timer0() interrupt 1 // timer is controlling square wave timer 0 { WAVE=~WAVE; } void interrupt0() interrupt 0 { IE ^= BIT(1); }
任何正确方向的提示将不胜感激!谢谢.抱歉格式化
volatile sbit WAVE = P1 ^ 7;
以上是大佬教程为你收集整理的8051 c中断全部内容,希望文章能够帮你解决8051 c中断所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。