产生一个占空比变化脉冲信号的程序,它产生的脉宽调制 信号用于电机变速控制。 include <reg51.h> define uchar unsigned char define uint unsigned int unchar time, status, percent, period; bit one round uint oldcount, target=500 void pulse (void) interrupt 1 using 1 /*TCO中断服务程序* TH0=-833256; /*1ms--10MHz*
单片机C语言应用程序设计 产生一个占空比变化脉冲信号的程序,它产生的脉宽调制 信号用于电机变速控制。 # include <reg51.h> # define uchar unsigned char # define uint unsigned int unchar time,status,percent,period; bit one_round; uint oldcount,target=500; void pulse (void) interrupt 1 using 1 /* T/C0中断服务程序*/ { TH0= - 833/256 ; /* 1ms - -10 MHz */
T0=-833%256; ET0=1; if (++time=percent)P1=0 else if (time==100) {tme=0;P1=1;} void tachmeter void)interrupt 2 using 2 /*外中断1服务程序* union f unit word struct uchar hi; uchar lo; j byte;
单片机C语言应用程序设计 TL0= - 833%256 ; ET0=1 ; if (++time=percent) P1=0 ; else if (time= =100 ) { time=0 ; P1=1;} } void tachmeter ( void ) interrupt 2 using 2 /* 外中断1服务程序*/ { union { unit word ; struct { uchar hi ; uchar lo ; } byte ; }
newcount newcount. byte. hi=THl newcount byte lo=TLI period= newcount. word- oldcount;/测得周期* oldcount=newcount word one round=l 每转一圈,引起中断,设置标志* oid main( void) P=0x04; /*置INT为高位优先级* TMOD=OXIl *T0T116位方式* TCON=0X54 /*T0,T1运行,Ⅲ1边沿触发*
单片机C语言应用程序设计 newcount ; newcount. byte. hi=TH1; newcount .byte .lo=TL1 ; period=newcount .word - oldcount ; /* 测得周期 */ oldcount=newcount .word ; one_round=1; /* 每转一圈,引起中断,设置标志*/ } void main ( void ) { IP=0x04 ; /* 置INT1为高位优先级 */ TMOD= 0x11 ; /* T0,T1 16位方式*/ TCON=0x54 ; /* T0,T1运行,IT1边沿触发*/
TH1=0;TL1=0; /*设置初始计数值* IE=0x86; /*允许中断EX1,ET0* for( (one rour 泮*每转一圈,调整 i if( period <target fif (percent <100)++percent; /*占空比增* else if percent>0)--percent: /*占空比减* one round=0
单片机C语言应用程序设计 TH1=0;TL1=0; /* 设置初始计数值 */ IE=0x86 ; /* 允许中断EX1,ET0 */ for (; ;) { if (one_round ) /* 每转一圈,调整 */ { if ( period <target ) {if (percent <100 ) ++percent ; /* 占空比增 */ } else if ( percent >0 ) - -percent ; / * 占空比减 */ one_round=0 ; } } }
413串行口使用的C语言编程 例4单片机fosc=10592MHz,波特率为9600,各设置32字节 的队列缓冲区用于发送接收。设计单片机和终端或另一计算机通 信的程序。 单片机串行口初始化成9600波特,中断程序双向处理字符,程 序双向缓冲字符。背景程序可以"放入"和"提取"在缓冲区的字符串, 而实际传入和传出SBUF的动作由中断完成。 Loadmsg函数加载缓冲数组,标志发送开始。缓冲区分发(t 和收(r)缓冲,缓冲区通过两种指示进in和出out)和一些标志(满ful, 空 empty,完成done)管理。队列缓冲区32字节接收缓冲(rbuf)区满, 不能再有字符插入。当tin=tout,发送缓冲区tbuf)空,发送中 断清 UART请求。具体程序如下:
单片机C语言应用程序设计 4.1.3 串行口使用的C语言编程 例4 单片机fosc=11.0592 MHz,波特率为9600,各设置32字节 的队列缓冲区用于发送接收。设计单片机和终端或另一计算机通 信的程序。 单片机串行口初始化成9600波特,中断程序双向处理字符,程 序双向缓冲字符。背景程序可以"放入"和"提取"在缓冲区的字符串, 而实际传入和传出SBUF的动作由中断完成。 Loadmsg 函数加载缓冲数组,标志发送开始。缓冲区分发(t) 和收(r)缓冲,缓冲区通过两种指示(进in和出out)和一些标志(满full, 空empty,完成done)管理。队列缓冲区32字节接收缓冲(r_buf)区满, 不能再有字符插入。当t_in=t_out,发送缓冲区(t_buf)空,发送中 断清除,停止UART请求。具体程序如下: