最全单片机参考答案(姜志海) 下载本文

#include #include #define uint unsigned int #define COM8255 XBYTE[0xdfff] #define PA8255 XBYTE[0xdffc] #define PB8255 XBYTE[0xdffd] #define PC8255 XBYTE[0xdffe]

void DYLA(uint i); void main(void) { COM8255=0x80; while(1)

{ PA8255=0x3f; /*PA口的第1到第6位分别控制6S,8S,9S,10S,12S,15S这6道工具的启停*/

DYLA(6); PA8255=0x3e; DYLA(2); PA8255=0x3c; DYLA(1); PA8255=0x3a; DYLA(1); PA8255=0x30; DYLA(2); PA8255=0x20; DYLA(3); PA8255=0x00; } }

25

6.编程实现由DAC0832输出的幅度和频率都可以控制的三角波,即从0上升到最大值,再从最大值下降到0,并不断重复。

/*产生幅值为125,频率为2Hz的三角波*/ #include

#define uchar unsigned char

#define CYCLE 2000 //此波形的得到是通过定时2ms中断,在中断中当数据加到125个数时,再递减到0.如此循环。可得三角波。其T=125*2*2ms=500ms.所以f=2Hz.

uchar xdata DA_data; /*定义变量指向0832的数据输出地址*/

void main(void)

{ TMOD=0x10; /*定时器1工作于方式1*/ TH1=-CYCLE/256; TL1=-CYCLE%6; TR1=1; IE=0x88; while(1); }

void timer1(void) interrupt 2 using 1 { static uchar s_Counter;

static bit flag; //定义递减标志位 if(flag==0)

{ if(s_Counter++>=124) //当增到125时开始递减 { flag=1; } } else

26

{ if(s_Counter--<=0) //当减到0时开始递增 { flag=0; } }

DA_data=s_Counter; //输出需要转换的数据 TH1=-CYCLE/256; TL1=-CYCLE%6; }

27