durongze 发表于 2025-2-18 13:22:16

ercircle 发表于 2025-2-18 12:30
另外SDCC、IAR的要选8bit烧录

我晚上回去试试。

durongze 发表于 2025-2-18 20:48:35

ercircle 发表于 2025-2-18 12:30
另外SDCC、IAR的要选8bit烧录
   


sdcc一定要选8位吗?你咋知道的呢? 好厉害哦。





ercircle 发表于 2025-2-18 23:57:04

durongze 发表于 2025-2-18 20:48
sdcc一定要选8位吗?你咋知道的呢? 好厉害哦。

{:4_198:}SDCC就是51的编译器嘛

zhaoye818 发表于 2025-2-21 08:10:47

收藏学习

xxkj2010 发表于 2025-2-21 10:38:26

谢谢分享!

durongze 发表于 2025-2-23 09:35:58

大佬,官方的AI8051U.H里面 有c51的语法,像下面这个unsigned char volatile far   这个在sdcc里面对应的是啥,你知道不?

是不是__sfr   __at(0x7efeb0)    PWMA_ETRPS?好像不对。会报地址超出的问题。


#define   PWMA_ETRPS            (*(unsigned char volatile far *)0x7efeb0)
#define   PWMA_ENO                (*(unsigned char volatile far *)0x7efeb1)
#define   PWMA_PS               (*(unsigned char volatile far *)0x7efeb2)
#define   PWMA_IOAUX            (*(unsigned char volatile far *)0x7efeb3)
#define   PWMB_ETRPS            (*(unsigned char volatile far *)0x7efeb4)
#define   PWMB_ENO                (*(unsigned char volatile far *)0x7efeb5)
#define   PWMB_PS               (*(unsigned char volatile far *)0x7efeb6)
#define   PWMB_IOAUX            (*(unsigned char volatile far *)0x7efeb7)
#define   PWMA_PS2                (*(unsigned char volatile far *)0x7efeb8)
#define   PWMA_RCRH               (*(unsigned char volatile far *)0x7efeb9)
#define   PWMB_RCRH               (*(unsigned char volatile far *)0x7efeba)

#define   PWMA_CR1                (*(unsigned char volatile far *)0x7efec0)
#define   PWMA_CR2                (*(unsigned char volatile far *)0x7efec1)
#define   PWMA_SMCR               (*(unsigned char volatile far *)0x7efec2)
#define   PWMA_ETR                (*(unsigned char volatile far *)0x7efec3)
#define   PWMA_IER                (*(unsigned char volatile far *)0x7efec4)
#define   PWMA_SR1                (*(unsigned char volatile far *)0x7efec5)
#define   PWMA_SR2                (*(unsigned char volatile far *)0x7efec6)
#define   PWMA_EGR                (*(unsigned char volatile far *)0x7efec7)
#define   PWMA_CCMR1            (*(unsigned char volatile far *)0x7efec8)
#define   PWMA_CCMR2            (*(unsigned char volatile far *)0x7efec9)
#define   PWMA_CCMR3            (*(unsigned char volatile far *)0x7efeca)
#define   PWMA_CCMR4            (*(unsigned char volatile far *)0x7efecb)
#define   PWMA_CCER1            (*(unsigned char volatile far *)0x7efecc)
#define   PWMA_CCER2            (*(unsigned char volatile far *)0x7efecd)
#define   PWMA_CNTRH            (*(unsigned char volatile far *)0x7efece)
#define   PWMA_CNTRL            (*(unsigned char volatile far *)0x7efecf)
#define   PWMA_PSCRH            (*(unsigned char volatile far *)0x7efed0)
#define   PWMA_PSCRL            (*(unsigned char volatile far *)0x7efed1)
#define   PWMA_ARRH               (*(unsigned char volatile far *)0x7efed2)
#define   PWMA_ARRL               (*(unsigned char volatile far *)0x7efed3)
#define   PWMA_RCR                (*(unsigned char volatile far *)0x7efed4)
#define   PWMA_CCR1H            (*(unsigned char volatile far *)0x7efed5)
#define   PWMA_CCR1L            (*(unsigned char volatile far *)0x7efed6)
#define   PWMA_CCR2H            (*(unsigned char volatile far *)0x7efed7)
#define   PWMA_CCR2L            (*(unsigned char volatile far *)0x7efed8)
#define   PWMA_CCR3H            (*(unsigned char volatile far *)0x7efed9)
#define   PWMA_CCR3L            (*(unsigned char volatile far *)0x7efeda)
#define   PWMA_CCR4H            (*(unsigned char volatile far *)0x7efedb)
#define   PWMA_CCR4L            (*(unsigned char volatile far *)0x7efedc)
#define   PWMA_BKR                (*(unsigned char volatile far *)0x7efedd)
#define   PWMA_DTR                (*(unsigned char volatile far *)0x7efede)
#define   PWMA_OISR               (*(unsigned char volatile far *)0x7efedf)



ercircle 发表于 2025-2-23 10:46:32

durongze 发表于 2025-2-23 09:35
大佬,官方的AI8051U.H里面 有c51的语法,像下面这个unsigned char volatile far   这个在sdcc里面对 ...

你看我发的源码里搜下,对应这个:
#define   PWMA_ETRPS            (*(unsigned char volatile __xdata *)0xfeb0)

durongze 发表于 2025-2-23 11:27:01

ercircle 发表于 2025-2-23 10:46
你看我发的源码里搜下,对应这个:
#define   PWMA_ETRPS            (*(unsigned char volatile __x ...

刚刚重新看了一下。我知道了。多谢。

durongze 发表于 2025-2-23 11:36:15

我往你的工程里加了一个红外的,直接把你的工程搞崩了。 {:ciya:}{:hanxiao:}

想要跟着你的步法,还是任重而道远。



---------------------------------------------------------------------------------
                case VK_DIGIT_0:
                  // printf("00000000");      //在数码管上显示字符串
                  IrWave(rawDataAirOn1, sizeof(rawDataAirOn1) / sizeof(rawDataAirOn1));
                  break;
                case VK_DIGIT_1:
                  // printf("%08lx", 0x1234abcdL);      //在数码管上显示字符串
                  IrWave(rawDataAirOn2, sizeof(rawDataAirOn2) / sizeof(rawDataAirOn2));
                  break;
                case VK_DIGIT_2:
                  // SEG7_ShowLong(0x98765432, 16);   //在数码管上显示4字节长整型数
                  IrWave(rawDataAirOn3, sizeof(rawDataAirOn3) / sizeof(rawDataAirOn3));
                  break;

-------------------------------------------------------------------------

#ifndef __IR_AIR_H__
#define __IR_AIR_H__

#include "ir_air.h"

#include "Ai8051U.h"

typedef   unsigned int    u16;

static volatile u16 tx_cnt;   //发送或空闲的脉冲计数(等于38KHZ的脉冲数,对应时间), 红外频率为38KHZ, 周期26.3us

void PWM_config(void)
{
    PWMA_CCER2 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMA_CCMR4 = 0x60; //设置 PWM4 模式1 输出
//PWMA_CCER2 = 0xB0; //使能 CC4E 通道, 低电平有效

    PWMA_ARRH = 0x02;//设置周期时间
    PWMA_ARRL = 0x77;
    PWMA_CCR4H = 0;
    PWMA_CCR4L = 210;//设置占空比时间

    PWMA_PS = 0x80;    //高级 PWM 通道 4N 输出脚选择位, 0x00:P1.7, 0x40:P0.7, 0x80:P2.7
//PWMA_PS = 0x80;    //高级 PWM 通道 4P 输出脚选择位, 0x00:P1.6, 0x40:P0.6, 0x80:P2.6
    PWMA_ENO = 0x80;   //使能 PWM4N 输出
//PWMA_ENO = 0x40;   //使能 PWM4P 输出
    PWMA_BKR = 0x80;   //使能主输出
//PWMA_IER = 0x10;   //使能中断
    PWMA_CR1 |= 0x81;//使能ARR预装载,开始计时
}

void PWMA_ISR() __interrupt(PWMA_VECTOR)
{
    if(PWMA_SR1 & 0X10)
    {
      PWMA_SR1 &=~0X10;
      // PWMA_SR1 = 0;
      if(--tx_cnt == 0)
      {
            PWMA_CCER2 = 0x00; // 写 CCMRx 前必须先清零 CCxE 关闭通道
            PWMA_CCMR4 = 0x40; // 设置 PWM4 强制为无效电平
            PWMA_CCER2 = 0x70; // 使能 CC4NE 通道, 低电平有效
            PWMA_IER = 0x00;   // 关闭中断
      }
    }
}

void IR_TxPulse(u16 pulse)
{
    tx_cnt = pulse;
    PWMA_CCER2 = 0x00; //
    PWMA_CCMR4 = 0x60; //
    PWMA_CCER2 = 0x70; //
    PWMA_IER = 0x10;   //
    while(tx_cnt);
}

void IR_TxSpace(u16 pulse)
{
    tx_cnt = pulse;
    PWMA_CCER2 = 0x00; //
    PWMA_CCMR4 = 0x40; //
    PWMA_CCER2 = 0x70; //
    PWMA_IER = 0x10;   //
    while(tx_cnt);
}

void IrWave(u16 *raw, int rawNum)
{
    int i;
    for(i = 0; i < rawNum; i++)
    {
      if (i % 2 == 0) {
            IR_TxPulse(raw/1000*38);
      } else {
            IR_TxSpace(raw/1000*38);
      }
    }
}

#endif

ercircle 发表于 2025-2-23 11:51:09

durongze 发表于 2025-2-23 11:36
我往你的工程里加了一个红外的,直接把你的工程搞崩了。

想要跟着你的步法,还是任重而道远。


夸张了,慢慢来呗{:4_197:}搞不定了工程贴上来大家一块研究研究
页: 1 2 3 [4] 5
查看完整版本: 分享USB_CDC库, USB_HID库, SDCC版, IAR版, @Ai8051U-8Bit