文档详情

第4章80C51的汇编与C语言程序设计.ppt

发布:2017-06-05约8.15千字共46页下载文档
文本预览下载声明
* * SMALL模式下,在内部RAM中完成 COMPACT模式下,在外部RAM中完成 LARGER模式下,在外部RAM中完成 固定存储器位置参数传递 80C51单片机不采用堆栈传递参数。但C51提供一种模拟堆栈,从而支持可重入函数的递归调用。 4.5.3 C51的库函数 常用的C51库函数参见附录B.2 * * 4.6 C51编程实例 4.6.1 80C51内部资源的编程 中断服务函数示例 中断函数的定义形式 void 函数名(void)interrupt n [using m] { 函数体 } 中断源 外中断0 定时器0 外中断1 定时器1 串行口 中断号 0 1 2 3 4 * * 【例10-1】单片机应用系统中,外中断0引脚接一个开关,并行口线P1.0接一个发光二级管。要求:开关闭合一次,发光二极管的状态改变一次。试编写程序 #include “reg51.h” #include “intrins.h” sbit P10=P1^0; void delay(void) {int a = 5000; while(a - - )_nop_( ); } void int_srv(void)interrupt 0 {delay( ); if(INT0 = =0){P10 = ! P10;while(INT0 = =0);} } void main() { P10 = 0; EA = 1; EX0 = 1; while(1); } * * 定时计数器编程示例 【例10-2】 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。 1、计算计数初值X: N=t/ Tcy =10×10-3/1×10-6=10000 计数器初值应为-10000。即应将 -(10000/256)送入TH0中,-(10000%256)送入TL0中。 2、求T0的方式控制字TMOD: M1M0=01,GATE=0,C/T=0,可取方式控制字为01H 3、程序清单(见下页) * * #include “reg51.h” sbit P10 = P1^0; void timer0(void)interrupt 1 { P10 = ! P10; TH0 = -(10000/256); TL0 = -(10000%256); } void main(void) { TMOD = 0x01; P10 = 0; TH0 = -(10000/256); TL0 = -(10000%256); EA = 1; ET0 = 1; TR0 = 1; while(1); } * * 4.6.2 80C51扩展资源的编程 通用并行口编程示例 【例10-3】用81C55作为微型打印机与单片机间的接口电路。 * * #include “reg51.h” #include “absacc.h” /*含有对XBYTE等绝对地址访问宏的定义*/ #define uchar unsigned char #define COMD8155 XBYTE[0x7f00] #define PA8155 XBYTE[0x7f01] #define PB8155 XBYTE[0x7f02] #define PC8155 XBYTE[0x7f03] sbit BUSY = P3^3; * * uchar code tab[17] = {0xb8,0xdf,0xbd,0xcc,0x20, 0xb3,0xf6,0xb0,0xe6,0xc9,0xe7,0x20, 0x32,0x30,0x30,0x38,0x0a};/*高教 出版社 2008*/ uchar t1 = 17; void ptr(uchar d) /*打印字符函数*/ { PA8155 = d; PC8155 = 0x00; /*产生选通脉冲*/ PC8155 = 0x01; while(BUSY); } * * void main(void) { COMD8155 = 0x0f;/*送命令字*/ prt(0x1c); /*送中文打印方式命令字高字节*/ prt(0x26); /*送中文打印方式命令字低字节*/ EA = 1; EX1 = 1; while(1); } * * void int1(void)interrupt 2 using 1 { uchar i; EA = 0; for(i = 0;i t1;i ++)prt(tab[i]); EA = 1
显示全部
相似文档