久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1339|回復: 0
打印 上一主題 下一主題
收起左側

求助avr單片機模擬PS手柄接電腦并口可用實機ps2沒反應

[復制鏈接]
跳轉到指定樓層
樓主
ID:518034 發表于 2020-6-21 19:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>
#define CHIP_SELECT_ACTIVE()        (0 == (PINB & (1<<2)))
#define BAUD 9600  

#define PSX_ACK_PORT        PORTC
#define PSX_ACK_DDR                DDRC
#define PSX_ACK_PIN                PINC
#define PSX_ACK_BIT                (1<<0)

#define ST_IDLE                        0
#define ST_READY                1
#define ST_SEND_5A                2
#define ST_SEND_BUF0        3
#define ST_SEND_BUF1    4
#define ST_DONE                        5

static unsigned char state = ST_IDLE;
static volatile unsigned char psxbuf[2];
void Init_Usart(void)  
{  
    //設置波特率  
    UBRRH = (F_CPU / BAUD / 16 - 1) / 256;  
    UBRRL = (F_CPU / BAUD / 16 - 1) % 256;  
    //接收中斷使能,接收使能,發送使能  
    UCSRB |= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN);  
}  

void Send_Char(char data)  
{  
    //查詢方式發送  
    while(!(UCSRA & (1 << UDRE)));  
    UDR = data;  
}  
static void ack()
{
        _delay_us(1);

        // pull acknowledge
        PSX_ACK_PORT &= ~PSX_ACK_BIT;
        PSX_ACK_DDR        |= PSX_ACK_BIT;

        _delay_us(3);

        // release acknowledge
        PSX_ACK_DDR &= ~PSX_ACK_BIT;
}
unsigned char  getkey(unsigned char date)
{
unsigned char num=0;
unsigned char tmp=0;

//while(PIND&(1<<3));
for(num=0;num<8;num++)
{
if(date&0x01) PORTB|=(1<<4);else PORTB&=~(1<<4);
date>>=1;

tmp>>=1;
//while((PIND&(1<<3))==0){
while(PINB&(1<<5));
if(PINB&(1<<3)) tmp|=0x80;//while((PIND&(1<<3))==0);}
while((PINB&(1<<5))==0);
}

return tmp;


}
int main(void)
{


        /* PORT C
         *    Name          Type
         * 0: PSX ACT       Emulated OC
         * 1: NC            OUT 0
         * 2: NC            OUT 0
         * 3: nc
         *
         * 4: nc
         * 5: nc
         * 6: reset
         */
        DDRC = 0xF6;
        PORTC = 0x08;

        /* PORT B
         *
         *          Name                    Type
         * 0, 1, 2: Attention               Input   (The 3 pins are shorted together)
         * 3      : CMD (MOSI) from PSX     Input
         * 4      : DATA (MISO) to PSX      Output 0
         * 5      : PSX CLK (SCK) from PSX  Input
         * 6      : XTAL
         * 7      : XTAL
         */
        PORTB = 0;
        DDRB = 0x10;
unsigned char t0,t1,t2,t3,t4,t5,t6,t7,t8;
Init_Usart();
PORTD=0XFF;
DDRD=0X00;
sei();
while(1){
while(!CHIP_SELECT_ACTIVE());
t0=getkey(0xff^0XFF);ack();
t1=getkey(0x41^0XFF);ack();
t2=getkey(0x5a^0XFF);ack();
if(t1==0x42){
t3=getkey(PIND^0XFF);ack();
t4=getkey(0XFF^0XFF);ack();

//t5=getkey(0x00);ack();
//t6=getkey(0x00);ack();
//t7=getkey(0x00);ack();
//t8=getkey(0x00);ack();

}
else if(t1==0x43){

t3=getkey(PIND^0XFF);ack();
t4=getkey(0XFF^0XFF);ack();

//t5=getkey(0x00);ack();
//t6=getkey(0x00);ack();
//t7=getkey(0x00);ack();
//t8=getkey(0x00);ack();
}
else if(t1==0x45){

t3=getkey(0x03^0XFF);ack();
t4=getkey(0X02^0XFF);ack();

//t5=getkey(0x01);ack();
//t6=getkey(0X02);ack();
//t7=getkey(0x01);ack();
//t8=getkey(0X00);ack();
}

Send_Char(t1);

while(CHIP_SELECT_ACTIVE());

}

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美一区二区三区视频 | 免费一级做a爰片久久毛片潮喷 | 久久精品视频免费观看 | 日韩视频一区二区在线 | 国产a视频 | 亚洲a在线观看 | 亚洲精品www | v亚洲| 日韩精品中文字幕在线 | 成人欧美一区二区三区色青冈 | 欧美色综合网 | 91精品国产91综合久久蜜臀 | 国产激情在线观看视频 | 中文av字幕 | 成年人网站免费 | 欧美视频网| 成人综合在线视频 | 国产精品99久久久久久久久久久久 | 狠狠干综合视频 | 给我免费的视频在线观看 | 亚洲国产精品成人综合久久久 | 97精品国产 | 青青草视频免费观看 | 欧美视频偷拍 | 欧美乱人伦视频 | 91欧美激情一区二区三区成人 | 一级毛片视频在线 | 午夜精品一区二区三区免费视频 | 精品无码久久久久久国产 | 一级在线观看 | 国产精品久久久久久久岛一牛影视 | 伊人二区| 99国产视频 | 波多野结衣一区二区 | 国产精品久久精品 | 国产在线一区二区三区 | 精品国产乱码久久久久久88av | 97中文视频 | 欧美成人精品在线观看 | 男女精品久久 | 伊人久久伊人 |