总线具有很多优势,例如可以挂很多外围的器件,比如DAC,ADC等等芯片。另外一个
优点就是很多外围器件就是为单片机总线结构设计的,比如8279这样的键盘,数码管驱
动芯片。总线操作简单,或者说很简单——再简单不过了。
下面以DAC0832为例讲述总线的基本操作方式,代码如下:
#include<reg52.h>
#include<absacc.h> //用于XBYTE,外围器件寻址
#define DAC0832 XBYTE[0x0100] //DAC0832地址
#define INTERRUPT_EXTERNAL_0 0 //外部中断0向量号
typedef unsigned int uint;
void Delay_Nms(uint N);
void main()
{
unsigned char vol = 0xFF;
EX0 = 1;
IT0 = 1; //外部中断使能,低电平触发
EA = 1; //开全局中断
while(1)
{
DAC0832 = vol; //转换
P1 = vol; //LED同时显示当前电压的二进制代码
vol >>= 1; //电压减半
if(vol == 0x00) vol = 0xFF; //为0时电压恢复到最大值
Delay_Nms(1000);//为观察仿真效果,延时1秒
}
}
void Hardware_Delay_1ms(void)
{
TMOD &=0xF0;
TMOD |=0x01;
TH0 = 0xFC;
TL0 =0x18;
TF0=0;
TR0=1;
while(TF0==0);
TR0=0;
}
void Delay_Nms(uint n) //延时n毫秒函数,采用硬件定时器实现
{
uint i;
for(i=0;i<n;i++)
Hardware_Delay_1ms();
}
优点就是很多外围器件就是为单片机总线结构设计的,比如8279这样的键盘,数码管驱
动芯片。总线操作简单,或者说很简单——再简单不过了。
下面以DAC0832为例讲述总线的基本操作方式,代码如下:
#include<reg52.h>
#include<absacc.h> //用于XBYTE,外围器件寻址
#define DAC0832 XBYTE[0x0100] //DAC0832地址
#define INTERRUPT_EXTERNAL_0 0 //外部中断0向量号
typedef unsigned int uint;
void Delay_Nms(uint N);
void main()
{
unsigned char vol = 0xFF;
EX0 = 1;
IT0 = 1; //外部中断使能,低电平触发
EA = 1; //开全局中断
while(1)
{
DAC0832 = vol; //转换
P1 = vol; //LED同时显示当前电压的二进制代码
vol >>= 1; //电压减半
if(vol == 0x00) vol = 0xFF; //为0时电压恢复到最大值
Delay_Nms(1000);//为观察仿真效果,延时1秒
}
}
void Hardware_Delay_1ms(void)
{
TMOD &=0xF0;
TMOD |=0x01;
TH0 = 0xFC;
TL0 =0x18;
TF0=0;
TR0=1;
while(TF0==0);
TR0=0;
}
void Delay_Nms(uint n) //延时n毫秒函数,采用硬件定时器实现
{
uint i;
for(i=0;i<n;i++)
Hardware_Delay_1ms();
}