找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5239|回复: 0
收起左侧

[讨论]关于12C887的中断问题

[复制链接]
ID:14097 发表于 2009-6-11 10:23 | 显示全部楼层 |阅读模式

#include <ABSACC.H>    //cs接P2^7,wr、rd与8031一一对应//
#include <REG52.H>   
#define  uchar unsigned char   
#define  MCA XBYTE[0xff0a]   /* 寄存器A */   
#define  MCB XBYTE[0xff0b]    /* 寄存器B */   
#define  MCC XBYTE[0xff0c]    /* 寄存器C */   
#define  MCD XBYTE[0xff0d]    /* 寄存器D */     
sbit uip_bit=ACC^7;  
  
uchar idata dt[6]={09,6,9,21,44,25}; /* 99/4/5 11:11:25 */              
uchar at[6]={9,8,7,4,2,0};   /* 年、月、日、时、分、秒 的地址*/  
  
uchar xdata *addr=0xff00;   /* 片选地址 */  
  
void init(void) {    /* 初始化函数 */  
  MCA=0x2f;        /* 时钟频率为32.768kHz,中断周期500ms */  
  ACC=MCC;         /* 读寄存器C,清零中断请求标志 */  
  ACC=MCD;         /* 读寄存器D,使VRT=1,数据有效 */  
  MCB=0x52;        /* 允许中断,时标为BCD码,24小时方式 */     
  EA=1;           /* 开中断 */  
  EX0=1;  
}  
void write_ds(void)
{                       /* 写时标函数 */  
  uchar i;  
  MCB=0x80;             /* 使set=1 */   为什么这里不把B寄存器的内容写如ACC呢??
  for(i=0;i<=6;i++)     /* 置时标初值 */  
   *(addr+at)=dt;  
}  
void read_ds(void)
{                     /* 读时标函数 */  
  uchar i;  
  ACC=MCA;这里为什么又不设置A寄存器的内容呢??
  while(uip_bit);       /* 判UIP位 */  
  for(i=0;i<6;i++)     /* 读时标寄存器的值 */  
   dt=*(addr+at);  
}  
void main(void)
{                /* 主函数 */  
   write_ds();  
   init();  
   read_ds();  
   while(1);  
}  
   还有为什么不设置CS、DS、AS、WR呢??

难道使用了片外地址之后就不用设置了吗/那是不是直接与8031对应的断口连接起来就是了呢??高手指点一下,小弟我刚学51不久。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表