📄 epphal.c
字号:
//*************************************
// 硬件提取层epphal.c
// 开发环境WINAVRGCC
// 2007-01-9
// Hjxiang
//*************************************
//标准C头文件
#include <stdint.h>
#include <stdlib.h>
//AVR头文件
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/delay.h>
//自定义头文件
#include "epphal.h"
#define RD_N 4
#define WR_N 5
#define ALE 6
#define CS_N 7
#define RESET_N 3
#define TXD232 1
#define INT_N 2
#define wait asm("nop")
void outportb(unsigned int Addr,unsigned char Data)
{
DDRA=0xff; //IOA OUT
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N); //IOB7=CS_N=0,IOB6=ALE=0,IOB5=WR_N=1,IOB4=RD_N=1,IOB3=RESET_N=1,IOB1=1;
PORTA=Addr;
PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=1,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
// 在ALE 下降沿的时候,D12锁定地址;
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
// 准备数据写入D12
PORTB=(0<<CS_N)|(0<<ALE)|(0<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=0,RD_N=1,RESET_N=1,INT_N=1
PORTA=Data;
asm("NOP");
asm("NOP");
PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
}
unsigned char inportb(unsigned Addr)
{
unsigned char temp;
DDRA=0xff; //IOA IN
PORTB=0b00111010; //IOB7=CS_N=0,IOB6=ALE=0,IOB5=WR_N=1,IOB4=RD_N=1,IOB3=RESET_N=1,IOB1=1;
PORTA=Addr;
PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=1,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
DDRA=0x00;
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(0<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=0;RESET_N=1,INT_N=1
temp=PORTA;
asm("NOP");
asm("NOP");
PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -