导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→程序在此

* 459: C51编程:一个比较菜的问题.请指点

   bwlkf 
bwlkf发表的帖子 

 程序在此
c51的主程序
#pragma small
#include<reg51.h>
#define uchar unsigned char
#define zero 0xee
#define one  0x28
#define two   0xcd
#define three  0x6d
#define four  0x2b
#define five  0x67
#define six  0xe7
#define seven 0x2c
#define eight  0xef
#define nine 0x6f
void displ();
void delay();
extern void du();
uchar count0,sec,minute;
uchar trdata[4]={0,0,0,0};
uchar num[10]={0xee,0x28,0xcd,0x6d,0x2b,0x67,0xe7,0x2c,0xef,0x6f};
void displ()             
{ while(1)
{
  uchar i=0;
  uchar p=0;
  while(i<4)
  {  
    SBUF=num[trdata[i]];
    while(TI==0);
    TI=0;
    i++;
    P0=p;
    p++;
    delay();
    SBUF=0x00;
    while(TI==0);
    TI==0;
}
}
  
}

void delay()
 {
  uchar n;
  for(n=0;n<200;n++);
 }
main()

  du();
  sec=0;
  minute=0;
  TMOD=0X01;
  ET0=1;
  TH0=-(50000/256);    
  TL0=-(50000%256);
  TR0=1;
  EA=1;
  displ();/*定时器开始工作,等待一秒*/
 }
  
void intt0(void) interrupt 1 using 2
{
  TH0=-(50000/256);    
  TL0=-(50000%256);
  count0++;
  if(count0==20)/*1秒到了*/
  { sec++;
    count0=0;
    if(sec==60) 
    { 
      minute++;
      sec=0;
      }
    
    trdata[3]=minute/10;
    trdata[2]=minute%10;
    trdata[1]=sec/10;
    trdata[0]=sec%10;
   
  }
}
汇编子程序模块
       NAME RWAT2402
      ?PR?DU?RWAT2402 SEGMENT CODE 
      PUBLIC DU
      RSEG ?PR?DU?RWAT2402
      VSDA EQU P1.0
      VSCL EQU P1.1
      SLA EQU 50H
      NUMBYT EQU 51H
      MTD EQU 30H
      MRD EQU 40H
      SLAW EQU 0A0H
      SLAR EQU 0A1H;预先处理
      
 DU: MOV SLA,#SLAW
     MOV NUMBYT,#01H
     MOV MTD,#50H
     LCALL WRNBYT
     MOV SLA,#SLAR
     MOV NUMBYT,#08H
     LCALL RDNBYT
     MOV R1,#40H
     
     MOV SCON,#50H
     MOV TMOD,#20H
     MOV TH1,#0FDH
     MOV TL1,#0FDH
     SETB TR1
  PP:MOV A,@R1
     MOV SBUF,A
  WA:JBC TI,CN
     SJMP WA
  CN:CLR TI

     RET;只读一个数据
     STAR:SETB VSDA;
     SETB VSCL
      NOP
      NOP
      NOP
      NOP
      CLR VSDA
      NOP
      NOP
      NOP
      NOP
      CLR VSCL
      RET 
 STOP:CLR VSDA;
      SETB VSCL
      NOP
      NOP
      NOP
      NOP
      SETB VSDA
      NOP
      NOP
      NOP
      NOP
      CLR VSDA
      CLR VSCL
      RET
MACK:CLR VSDA;
      SETB VSCL
      NOP
      NOP
      NOP
      NOP
      CLR VSCL
      SETB VSDA
      RET 
MNACK:SETB VSDA;
      SETB VSCL
      NOP
      NOP
      NOP
      NOP
      CLR VSCL
      CLR VSDA
      RET 
CACK:SETB VSDA;
      SETB VSCL
      CLR F0
      MOV C,VSDA
      JNC CEND
      SETB F0 
      CEND:CLR VSCL
      RET 
WRBYT:MOV R0,#08H;
  WLP:RLC A
      JC WR1
      AJMP WR0 
 WLP1:DJNZ R0,WLP
      RET 
  WR1:SETB VSDA
      SETB VSCL
      NOP
      NOP
      NOP
      NOP
      CLR VSCL
      CLR VSDA
      AJMP WLP1 
  WR0:CLR VSDA
      SETB VSCL
      NOP
      NOP
      NOP
      NOP
      CLR VSCL
      AJMP WLP1 
RDBYT:MOV R0,#08H;
  RLP:SETB VSDA
      SETB VSCL
      MOV C,VSDA
      MOV A,R2
      RLC A
      MOV R2,A
      CLR VSCL
      DJNZ R0,RLP
      RET 
WRNBYT:MOV R3,NUMBYT;
      LCALL STAR
      MOV A,SLA
      LCALL WRBYT
      LCALL CACK
      JB F0,WRNBYT
      MOV R1,#MTD 
 WRDA:MOV A,@R1
      LCALL WRBYT
      LCALL CACK
      JB F0,WRNBYT
      INC R1
      DJNZ R3,WRDA
      LCALL STOP
      RET 
RDNBYT:MOV R3,NUMBYT;
      LCALL STAR
      MOV A,SLA
      LCALL WRBYT
      LCALL CACK
      JB F0,RDNBYT 
 RDN: MOV R1,#MRD 
 RDN1: LCALL RDBYT
      MOV @R1,A
      DJNZ R3,ACK
      LCALL MNACK
      LCALL STOP
      RET 
  ACK:LCALL MACK
      INC R1
      SJMP RDN1
      END


发表时间:2001年8月23日10:08:00

  
回复该帖

本主题共有 3 帖,分页:>>>>>该主题的所有内容[3]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  11075.[详细]汇编怎么用
摘要:汇编是不是可以加在C中用    怎么定义请指教:谢谢......(36字)
- [阿发][1669次] 2002年9月15日

[上一篇帖子]:硬件:protel调用orcad文件的麻烦????找高手解决我用ORCAD9.0做了多文件schma
[下一篇帖子]:C51编程:一个比较菜的问题.请指点我写了一c51的电子时钟程序。编译后运行verygood.但是不