单片机原理与接口技术第5章 MCS-51单片机C51:程序设计
* * void disp(char ch1) /*显示函数*/ {static char ch=0x01; P2=ch; P1=dis_data[ch1]; ch=ch1; if(ch= =0x10) ch=0x01; } main( ) {char ch1; TMOD=0x01; /*T0为16位定时工作方式*/ while(1) {for(ch1=0; ch14; ch1++) /*对四位LED扫描一遍*/ {disp(ch1); delay( ); } delay( ); delay( ); } } 5.6.1 单片机内/外部资源应用程序设计 第5章 C51程序设计 * * 例5-26 如图5-10所示为扩展A/D转换电路。对8个通道轮流采集一次,采集的结果放在数组ad中。 5.6.1 单片机内/外部资源应用程序设计 第5章 C51程序设计 * * #include “reg51.h” #include “absacc.h” sbit ad_busy=P3^2; main( ) {static char idata ad[8]; char i; char pdata *ad_ch; 5.6.1 单片机内/外部资源应用程序设计 第5章 C51程序设计 * * ad_ch=0x78; /*设置初始通道地址*/ for(i=0; i8; i++) {*ad_ch=0; /*启动A/D转换*/ i=i; /*延时等待EOC信号变低*/ while(ad_busy= =1); /*查询*/ ad[i]=*ad_ch; /*存放结果*/ ad_ch++; } } 5.6.1 单片机内/外部资源应用程序设计 第5章 C51程序设计 * * 例5-27 5.6.1 单片机内/外部资源应用程序设计 如图所示为扩展D/A转换电路。要求DAC0832输出锯齿波电压信号,信号周期自由。程序如下: 第5章 C51程序设计 * * 例5-27 #include “reg51.h” #include “absacc.h” #define DA0832 PBYTE[0x7f] main( ) {char i; do {for(i=0; i255; i++) {DAC0832=i;} }while(1); } 5.6.1 单片机内/外部资源应用程序设计 第5章 C51程序设计 * * 5.6.2 C51语言和MCS-51汇编语言混合编程 C51高级语言一般用来编写主程序和运算程序比较方便,用汇编语言编写与硬件有关的子程序更直接而速度快。 在混合编程中,关键是传递参数和函数的返回值,它们必须有完整的约定。 第5章 C51程序设计 * * C51程序调用汇编语言程序要注意以下几点 1) 被调函数要在主函数中说明,在汇编程序中,要使用伪指令使CODE选项有效并声明为可再定位段类型,并且根据不同情况对函数名作转换,见表5-6所示。 5.6.2 C51语言和MCS-51汇编语言混合编程 第5章 C51程序设计 * * 2) 对为其他模块使用的符号进行PUBLIC声明,对外来符号进行EXTRN声明。 3) 参数的传递。在混合语言编程中,关键是入口参数和出口参数的传递,C51编译器可使用寄存器传递参数,也可以使用固定存储器或使用堆栈,由于MCS-51的堆栈深度有限,因此多用寄存器或存储器传递。用寄存器传递最多只能传递三个参数,需选择固定的寄存器,见表5-7所示。 5.6.2 C51语言和MCS-51汇编语言混合编程 第5章 C51程序设计 * * 例如:func1(int a),“a”是第一个参数,在R6、R7传递,func2(int b, int c, int *d),“b”在R6,R7中传递,“c”在R4,R5中传递,“d”在R1,R2,R3中传递。如果传递参数寄存器不够用,可以使用存储器传送,通过指针取得参数。 汇编语言通过寄存器或存储器传递参数给C51程序。通过寄存器传递返回值给C51程序,返回值使用寄存器见表5-8所示。 5.6.2 C51语言和MCS-51汇编语言混合编程 第5章 C51程序设计 * * 例5-28 用P1.0口产生周期为4ms的方波信号,同时用P1.1口产生周期为8ms的方波信号。分别用汇编语言和C语言设计三个模块程序如下:
原创力文档

文档评论(0)