LED_Sha( )interrupt 2 {
unsigned char m,t,u,v,i,ww,*p; int n;
p=0x2000;t=0;
m=6;u=0;v=1,ww=1; while(1) {
if(m==24) m=0; if(u==60) u=0; if(u==-1) u=59; n=m*100+u;
for(i=1;i<=100;i++) {
Disp_led(n); }
if(s3==0) {
for(i=0;i<100;i++) ; if(s3==0) t=1,m++;} if(s4==0) { for(i=0;i<100;i++) ; if(s4==0) t=1, u++;} if(s5==0) {
for(i=0;i<100;i++) ; if(s5==0) t=1,u--;} if(t==1) {
if(s6==0) { for(i=0;i<250;i++) ;
if(s6==0) { t=0;
mmhh[v++]=m; mmhh[v++]=u; mmhh[0]=ww++; } } } } }
interserve(void) interrupt 1 {
int u,n,i; xsdb=255; xsd=127; c1a=255; c1b=0xc6; for(i=1;i<30;i++) { b20Set();
for(u=1;u<30;u++) {
n=b20Get(); Disp_led(n); } } xsd=255; c1a=0; c1b=255; TH0=0xff; TL0=0x0; TR0=1; }
dsq() interrupt 3 { jw=1;jw=1;jw=1;jw=0;jw=0;jw=0;jw=1;jw=1;jw=1; TR1=1; }
main() {
unsigned int time,i,m,u,k,n;
unsigned char *p; p=0x2000; IE=0x8f; IP=0x3;
TMOD=0x15; TH0=0xff; TL0=0x0; TR0=1; TR1=1; xsdb=255;
for(i=0;i<121;i++)
mmhh[i]=byte_read(p+i);//程序开始时读取EEPROM中数据 zz=mmhh[0]*2; m=mmhh[0];
for(k=1;k<300;k++) Disp_led(m); for(i=1;i<=zz;i=i+2) {
m=mmhh[i]; u=mmhh[i+1]; n=m*100+u;
for(k=1;k<600;k++) Disp_led(n); }
EA=1; while(1) {
xsdb=255; jfb++; if( jfb<=70) xsdb=127; else if(jfb>140) {xsdb=127;jfb=0;} else xsdb=255; Gets1302(); m=Utime[2]; n=Utime[1]; time=m*100+n; Disp_led(time); } }
习题11
1 画出案例22(A)源程序的程序架构和函数调用路线图。
解:案例22(A)源程序的程序架构和函数调用路线图如下:
2画出案例22(B)源程序的程序架构和函数调用路线图。
解:案例22(B)源程序的程序架构和函数调用路线图如下:
3 写出案例22中PC机程序的传输率设置语句
解:案例22中PC机程序的传输率设置语句如下:
outportb(0x3FB,0x80);/*设置控制寄存器,允许访问波特率因子寄存器 */ outportb(0x3F8,0x60);/* 命波特率为1200, LSB为60H */ outportb(0x3F9,0x00);/* 命波特率为1200,MSB为00H */
4 写出案例22中单片机程序的传输率设置语句
解:案例22中单片机程序的传输率设置语句如下:
SCON=0xE0; // 设定串行口工作方式为3 TMOD=0x20; // 设置定时器T1工作方式为2
TL1=0xe6;TH1=0xe6; // 设定T1定时器的初值,使波特率为1200
5 把传输率改为2400,请写出PC机程序和单片机程序中相应的修改语句。
6 把第8章项目1源程序中的T1的工作方式改为方式2,以实现T1计数器计数初值的自动重装。
习题12
1 画出项目4中PC机串行通信源程序的程序架构和函数调用路线图。
解:项目4中PC机串行通信源程序的程序架构和函数调用路线图如下:
2 画出案例24:W29C020的使用源程序的程序架构和函数调用路线图。
解:案例24源程序的程序架构和函数调用路线图如下:
3 画出项目5中单片机汉字显示及串行通信源程序的程序架构和函数调用路线图。
解:项目5中单片机汉字显示及串行通信源程序的程序架构和函数调用路线图如下:
习题13
1 画出模数转换芯片ADC0809的内部结构图. 解:ADC0809的内部结构图如下:
2 按图13-3所示的ADC0809与单片机学习板的接口电路,写出10个可访问ADC0809的存储单元地址。
解: 在图13-3所示的ADC0809与单片机学习板的接口电路中,对于通道IN0
来说,其低12位地址可任意指定,所以可将0x0fff中的左边第1个f,分别用0、1、2、??、9替换,因此可写出这10个可访问ADC0809的存储单元地址:
0x00ff,0x01ff,0x02ff,0x03ff,0x04ff,0x05ff,0x06ff,0x07ff,0x08ff,0x09ff
3 画出数模转换芯片DAC0832的内部结构图. 解:DAC0832的内部结构图如下:
4 按图13-6所示的DAC0832与单片机学习板的接口电路,写出10个可访问ADC0832的存储单元地址.
解:在图13-6所示的DAC0832与单片机学习板的接口电路中,DAC0832工作于直通方式时,相当于单片机的一片外存储单元,其地址值并不唯一,可用最高位为0,其于15位为任意值的片外地址值(不小于0x0100)来表示,如0x7ff~0x100间的任意四位十六进制数均可。