用c51语言编程实现显示78的程序,华东交通大学单片机微机原理与应用基础教程第7章c51语言与其程序设计.ppt...

华东交通大学单片机微机原理与应用基础教程第7章c51语言与其程序设计

C51程序调用汇编语言程序要注意以下几点: 1) 被调函数要在主函数中说明,在汇编程序中,要使用伪指令使CODE选项有效并声明为可再定位段类型,并且根据不同情况对函数名作转换,见下表。 7.6.2 C51和51汇编语言混合编程 2) 对为其他模块使用的符号进行PUBLIC声明,对外来符号进行EXTRN声明。 3) 参数的传递。在混合语言编程中,关键是入口参数和出口参数的传递,C51编译器可使用寄存器传递参数,也可以使用固定存储器或使用堆栈,由于MCS-51的堆栈深度有限,因此多用寄存器或存储器传递。用寄存器传递最多只能传递三个参数,需选择固定的寄存器,见下表所示。 7.6.2 C51和51汇编语言混合编程 例如: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程序,返回值使用寄存器见下表。 7.6.2 C51和51汇编语言混合编程 7.6.2 C51和51汇编语言混合编程 【例7-28】 用P1.0口产生周期为4ms的方波信号,同时用 P1.1口产生周期为8ms的方波信号。分别用汇编语言和C51 语言设计三个模块程序如下: 模块1:用C51编写主程序,使P1.1产生周期为8ms的方波; 模块2:用C51语言编程,使P1.0产生周期为4ms的方波; 模块3:用汇编语言编写延时1ms程序。 程序的执行过程是:模块1调用模块二获得8ms方波, 模块2调模块3,向汇编程序传递字符型参数(x=2),实 现2ms延时。 #include #define uchar unsigned char sbit P1_1=P1^1; void delay_4ms(void); /*声明延时4ms函数(模块二)*/ main( ) {uchar i; for(; ; ) {P1_1=0; delay_4ms( ); /*调模块二延时4ms*/ P1_1=1; /*产生8ms方波*/ delay_4ms( ); /*调模块二延时4ms*/ } } 1)模块1程序(P1.1产生周期为8ms的方波) 7.6.2 C51和51汇编语言混合编程 2)模块2程序(delay_4ms:P1.1产生产生周期为4ms的方波) 7.6.2 C51和51汇编语言混合编程 #include #define uchar unsigned char sbit P1_0=P1^0; delay_1ms(uchar x); /*声明延时1ms函数(模块三)*/ void delay_4ms(void) {P1_0=0; delay_1ms(2); /*调汇编函数(模块三)*/ P1_0=1; delay_1ms(2); /*调汇编函数(模块三)*/ } 3)模块3程序(汇编语言编写延时1ms程序delay_1ms) 7.6.2 C51和51汇编语言混合编程 PUBLIC _DELAY_1MS ; DELAY_1MS为其他模块调用 DE SEGMENT CODE ;定义DE段为再定位程序段 RSEG DE ;选择DE为当前段 _DELAY_1MS: NOP DELA: MOV R1, #0F8H ;延时 LOP1: NOP NOP DJNZ R1, LOP1 DJNZ R7, DELA ;R7为C51传递来的参数(x=2) EXIT: RET END 程序调试步骤: 7.6.2 C51和51汇编语言混合编程 以上各模块可以先分别汇编和编译,生成的.OBJ文件,然后运行连接将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值