• 大小: 92KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: proteus  8086  8255  

资源简介

两片8255实现车灯、油门、刹车、转向、换挡功能,使用步进电机模拟轮子,数码管显示速度。

资源截图

代码片段和文件信息

/* Main.c file generated by New Project wizard
 *
 * Created:   周五 1月 6 2017
 * Processor: 8086
 * Compiler:  Digital Mars C
 *
 * Before starting simulation set Internal Memory Size 
 * in the 8086 model properties to 0x10000
 */

#define base8255 8000H //设定值

#define PA base8255+00H*2 //PA口
#define PB base8255+01H*2 //PB口
#define PC base8255+02H*2 //PC口(本次未使用)
#define COM8255 base8255+03H*2 //工作方式

#define Bbase8255 9000H //设定值

#define BPA 9000H //PA口
#define BPB 9040H //PB口
#define BPC 9080H //PC口(本次未使用)
#define COMB8255 90C0H //工作方式
#define ADC 0E002H
char xiangxu[8]={02H06H04H0CH08H09H01H03H};  //相序表

void outp(unsigned int addr char data) {
  __asm {
    mov dx addr
    mov al data
    out dx al
  }
}

// Read a byte from the specified I/O port
char inp(unsigned int addr) {
  char result;
  
  __asm {
    mov dx addr
    in al dx
    mov result al
  }
  
  return result;
}

void delay(){
   for(int i=0;i<50;++i){
      for(int j=0;j<120;++j)
 ;
   }
}

void delayms(int ms){
   for(int i=0;i      for(int j=0;j<122;++j){}
}

char tmpjudge;
int m_i=0t_i=0;
char tmp1tmp2;
int spd=0;
unsigned int speed=0;
unsigned char speed1=0speed2=0speedshow=0;

void main(void)
 {
    //设置工作方式:10001010(特征位=1,A组0方式=00,PA输出=0,PC上半输入=1,B组0方式=0,PB输入=1,PC下半输出=0)
    outp(COM825508AH);
    //设置工作方式:10001000(特征位=1,A组0方式=00,PA输出=0,PC上半输出=1,B组0方式=0,PB输出=0,PC下半输出=0)
    outp(COMB8255088H);
    outp(PA0FFH);
    outp(PC0FFH);
    outp(PB00H);
   while (1){
     tmp=inp(PB);//车灯判断,用到PB口低三位,输出到PA口低四位
     tmp=tmp&06H;
     if(tmp==04H){
tmp=inp(PB);
tmp1=(tmp)&01H;
if(tmp1==00H)tmp=0b11111010;
if(tmp1==01H)tmp=0b11111011;
outp(PAtmp);
     }
     else if(tmp==02H){
tmp=inp(PB);
tmp1=(tmp)&01H;
if(tmp1==00H)tmp=0b11111100;
if(tmp1==01H)tmp=0b11111101;
outp(PAtmp);
     }
     else {
tmp=inp(PB);
tmp1=(tmp)&01H;
if(tmp1==00H)tmp=0b11111110;
if(tmp1==01H)tmp=0b11111111;
outp(PAtmp);
     }
     unsigned char tmp3=inp(PB);//速度判断,用到PB口3~6位,输出到PC口低四位
     tmp3=tmp3&0b11111000;
     switch(tmp3){
case 0b11110000:spd=-1;break;
case 0b11101000:spd=0;break;
case 0b11011000:spd=1;break;
case 0b10111000:spd=2;break;
case 0b01111000:spd=3;break;
     }
     if(spd!=-1 && spd!=0){
outp(PCxiangxu[m_i]);
if(m_i>0)--m_i;
else m_i=7;
tmp=inp(PA);
tmp=tmp&0b11111111;
outp(PAtmp);
if(speed<22*spd)speed+=(spd+1);
else speed-=(spd+1);
delayMS((4-spd)*35);
     }
     else if(spd==-1){
outp(PCxiangxu[m_i]);
if(m_i<7)++m_i;
else m_i=0;
tmp3=inp(PA);
tmp3=tmp3&0b11110111;
outp(PAtmp3);
if(speed>5)speed-=2;
else speed=5;
delayMS(50);
     }
     else if(spd==0){
if(speed>0)speed-=1;
delayMS(50);
     }
     tmp=inp(PA);//转方向判断,用到PC口高四位,输出到PA口高四位
     tmp1=tmp&(0FH);
     tmp=inp(PC);
     tmp2=tmp&(030H);
     if(tmp2==20H){
if(t_i>0)--t_i;
else t_i=7;
tmp3=(xiangxu[t_i])<<

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-01-07 00:23  CourseDesign - 副本\
     目录           0  2017-01-06 22:39  CourseDesign - 副本\8086\
     目录           0  2017-01-07 00:14  CourseDesign - 副本\8086\Debug\
     文件        4664  2017-01-07 08:59  CourseDesign - 副本\8086\Debug\Debug.exe
     文件        3361  2017-01-07 08:59  CourseDesign - 副本\8086\Debug\main.obj
     文件        1341  2017-01-07 08:59  CourseDesign - 副本\8086\Debug\Makefile
     文件         190  2017-01-07 00:14  CourseDesign - 副本\8086\Debug\rtl.obj
     文件        3840  2017-01-07 08:59  CourseDesign - 副本\8086\main.c
     文件         559  2017-01-06 16:25  CourseDesign - 副本\8086\rtl.asm
     文件       30381  2017-01-07 00:13  CourseDesign - 副本\Backup Of CourseDesign.pdsbak
     文件       30431  2017-01-07 00:23  CourseDesign - 副本\CourseDesign.pdsprj
     文件        4812  2017-01-07 09:02  CourseDesign - 副本\CourseDesign.pdsprj.ZALUS.Ben Zalus.workspace
     文件       25453  2017-01-06 21:41  CourseDesign - 副本\Last Loaded CourseDesign.pdsbak

评论

共有 条评论