第7章 单片机的C语言程序设计.ppt

#include reg51.h #define uint unsigned int #define uchar unsigned char extern void callasm(uchar); /* 定义外部汇编函数 */ extern void dayl(uint); /* 定义外部汇编函数dayl */ void main(void) { uint i,j,m,total = 0; uchar idata buf[50],dis[3]; uchar code tab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*段码表*/ P1 =0xf8; while(1) { total = 1; callasm( buf ); /* 调汇编函数,传递参数为数组首址*/ for( i = 50; i0;i-- ) / *汇编函数执行完后返回于此*/ total += buf[i-1]; /*50个数累加 */ total=total/50; /*求平均 */ dis[0]=total%10; /*求个位,并存入显示缓冲区 */ total=total/10; dis[1]=total%10; /*求十位,并存入显示缓冲区 */ dis[2]=total/10; /*求百位,并存入显示缓冲区 */ P3=0x01; /*P3口位选 */ for(m=0;m=50;m++) { for(i=0;i=3;i++) /*显示*/ { P1=tab[dis[i]]; dayl (50) ;/* 调汇编函数DAYL,延时*/ P3=1;}}}} 汇编语言程序CALLASM.ASM----完成50个数据采集并存于BUF为首址的单元 PUBLIC –CALLASM ;公共符号定义 DFFE SEGMENT CODE ;DFFE定为可再定位段 RSEG DFFE ;DFFE为当前段 -CALLASM: PUSH 07H PUSH 00H ;保护变量,因在下述程序中要用R7和R0 MOV A, R7 ;取BUF地址 MOV R0, A ;R0指示存放地址 MOV R7, #50 MOV DPTR, #7FF8H ;DPTR 指向A/D地址 AGA:MOV A, #0 MOVX @DPTR, A ;启动转换 JB P3.4, $ ;等待转换结束 MOVX A,@DPTR ;读转换数据MOV @R0,A ;存入BUF数组 INC R0 DJNZ R7,AGA POP 00H POP 07H ;恢复BUF地址 RET END 汇编语言程序 DAYL.ASM――延时 PUBLIC -DAYL ;公共符号定义 DTE SEGMENT CODE ;定义DTE段为再定位程序段 RSEG DTE ;选择DTE为当前段 -DAYL: NOP DELA: MOV R1,#0F8H ;延时 LOP1: NOP NOP DJNZ R1,LOP1 DJNZ R7,DELA ;R7为C程序传递过来的参数 EXIT: RET END 10.10 C语言函数库的管理与使用 C语言作为一种高级编程语言,其主要的优势之一就是有大量的丰富的库函数可直接使用。而库函数的使用是解决程序共享和提高编程效率的最有效的途径之一。函数库是具有目标代码形式的函数的集合。虽然在许多方面,库就像一个独立编译的模块,但它有一个不同于目标文件的特别之处:当某个独立编译的目标文件与其它文件连接时,所有该目标文件中的函数,无论它们是否真正被程序所用,都成为可执行的一部分;而当一个库文件与其它文件连接时,可执行程序中只包含那些真正由程序所用的库函数。例如,C51标准库中包含很多函数,而你的程序只包含真正由你的程序所调用的函数。 10.10.1 库函数的编写

文档评论(0)

1亿VIP精品文档

相关文档