实际参数:在函数调用时,主调用函数名后面括号中的表达式称为“实际参数”,简称实参。
在C语言的函数的函数调用中,实际参数与形式参数之间的数居传递是单向进行的,只能由实际参数传递给形式参数,而不能有形式参数传递给实际参数。
11-3.如何定义一个Cx51的中断函数? 答:定义一个Cx51的中断函数方法如下: 函数类型 函数名 (形式参数) interrupt n [using m]
Cx51关键字 interrupt后面是中断号 n,n的取值范围0-31,编译器从8n+3处产生中断向量。Cx51关键字using 后面的 m 是0-3的常整数,编译器据此选择4个工作寄存器组中的一个,作为中断函数的寄存器工作区。
11-6.Cx51语言编写第7章思考与习题第7、8题,第6章思考题与习题第8、9题,第5章思考与习题第5题。
解:题7-7是8051晶振频率为12MHz,以方式3(教科书有错)进行串行通信,设波特率为2400bit/s,第9位为奇校验位,以中断方式发送。编写相关程序 初始化部分: #include
SCON=SCONW; TMOD=TMODW; PCON=PCON & 0x7F; TH1=-13; TL1=-13; ES=1; ET1=0; TR1=1; EA=1;
? }
中断函数部分:
void serial_ISR () interrupt 4 [using 1] { TI=0;
/* ACC=待发数据*/ TB8=P; SBUF=ACC; ? }
题7-8是8051晶振频率为12MHz,以方式3进行串行通信,设波特率为2400bit/s,第9位为偶校验位,以查询方式接收,请编写程序 初始化部分: #include
SCON=SCONW; TMOD=TMODW; PCON=PCON & 0x7F; TH1=-13; TL1=-13; ES=0; ET1=0; TR1=1;
? }
串行口查询函数部分: void serial_ISR () { if(TI= =0); {
CY=RB8; ACC=SBUF; ? } }
题6-8已知8051单片机的fsoc=12MHz,试用P1.7输出矩形波。矩形波高电平100μs,低电平200μs。
∵12000000÷12=1000000 ∴每个机器周期1μs。 T1方式2计数100后溢出为1×100=100μs。 可再设定K为完成3分频变量参数; K=0(3)时高电平、K=1、2时低电平。 初始化程序: #include
TMOD=TMODW; TH1=-100; TL1=-100; ET1=1; TR1=1;
EA=1; ? }
中断函数部分:
void T1_ISR () interrupt 3 [using 1] { k--; if(k= =0); {k=3; P17=1; }else {P17=0; } }
题6-9设fosc=6MHz,试编写一段程序,功能为:对定时器T0初始化,使之工作在模式2,产生400μs定时,用中断控制方式,控制P1.7输出周期为200ms的方波。 初始化程序: #include
EA=1; ? }
中断函数部分:
void T0_ISR () interrupt 1 [using 1] { k--; if(k= =0); { k=250; P17=~P17; } }