问答

汇集网友智慧,解决技术难题

21ic问答首页 - TAG - define
  • 扎原因扎结果 sos

    [b]//代码如下[/b] #include #include //#include //#include #include #define SEG_BITSEL_PORT PORTD //位选端口 #define SEG_BITSEL_PORT_DIR TRISD //位选端口的方向寄存器 #define SEG_FONT_PORT PORTC //字形输出端口 #define SEG_FONT_PORT_DIR TRISC //字形输出端口的方向寄存器 #define DLY_MS 67 const char Seg7TableN[]={0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000}; //__CONFIG(FOSC_HS & WDTE_ON & PWRTE_OFF & BOREN_ON & LVP_ON & CPD_OFF & WRT_OFF & CP_OFF); //__CONFIG (XT & WDTDIS & LVPDIS); unsigned int g_ADRTable[12] = {0,0,0,0,0,0,0,0,0,0,0 }; unsigned char g_Count=0; bit OverFlag = 0;//12位转换次数完成标志位清零; void delayms (int ms); void DisplayData (unsigned int iData); interrupt ISR (void) { if ( ADIE && ADIF ) { ADIF = 0; g_ADRTable[g_Count]=(((unsigned int)ADRESH)<<8)+ADRESL; g_Count++; if(g_Count==12) { g_Count =0; OverFlag=1;// } else { GO_DONE = 1;//启动AD } } else { while(1); } } void main(void) { //void DisplayData(); char i=0,j=0; int tmp = 0;// int adc_v = 0; TRISA0 = 1; SEG_BITSEL_PORT_DIR = 0;//位选端口的方向寄存器,确定输出端口 SEG_FONT_PORT_DIR = 0;//字形输出端口的方向寄存器,确定输出端口 ADFM = 1; PCFG3:PCFG0 = 0000; ADCON0 = 0B11000001; ADIE = 1; ADIF = 0; PEIE = 1; GIE = 1; for(i=0;i<15;i++) { } GO_DONE = 1; while(GO_DONE) { if(OverFlag==1) { for(i=0;i<12;i++)//冒泡法排序 { for(j=i+1;j<12;j++) { if(g_ADRTable[i] > g_ADRTable[j]) { tmp = g_ADRTable[i]; g_ADRTable[i] = g_ADRTable[j]; g_ADRTable[j] = tmp; } } } tmp = 0; for(i=2;i<10;i++) { tmp = tmp + g_ADRTable[i]; } tmp = tmp >>3;//将数按照 2进制像右移动.每向右移动一位,相当于 除2的n次幂 adc_v = tmp; adc_v = ((long)adc_v*5000/1023); OverFlag = 0; GO_DONE = 1; } DisplayData(adc_v); } } void DisplayData (unsigned int iData ) { char i=0,j=0;// char k = 0,NumStr[ 5 ]={0,0,0,0,0}; NumStr[1]=iData / 1000;//取整 NumStr[2]=iData % 1000/100; NumStr[3]=iData % 100/10; NumStr[4]=iData % 10; for(i=0;i<10;i++) { SEG_BITSEL_PORT = k =0X01; for(j=0;j<=4;j++) { SEG_BITSEL_PORT = k; if(j==1) { SEG_FONT_PORT = Seg7TableN[NumStr[1]]&0b01111111; } else { SEG_FONT_PORT = Seg7TableN[NumStr[j]]; } delayms(5); k = k <<1;//把1向左移1为显示 } } } void delayms (int ms) { int i=0,j =0; for(i=0;i < ms;i++) for(j =0; j < DLY_MS;j++) {;} } //仿真结果,单片机数码管显示全是0,与设计的测量电阻电压不对,希望大家来找茬,这原因与结果

    se AD define include 端口 unsigned

    1163浏览量 0回复量 关注量
  • ATMEGA4809的时钟配置疑问?

    在使用AVR单片机时,发现设置MAIN时钟时需要对CCP寄存器进行解锁操作(4个内指令完成)。在查看了protected_io.S文件后,发现此使用了汇编来解锁以保证能在4个指令周期内完成时钟配置。但是有一个疑问就是,调用protected_write_io函数来操作CCP寄存器时,汇编代码中使用的寄存器为R20和R24为什么不是其他寄存器呢?#include PUBLIC_FUNCTION(protected_write_io) #if defined(__GNUC__) #ifdef RAMPZ out _SFR_IO_ADDR(RAMPZ), r1 // Clear bits 23:16 of Z #endif //为什么使用R24和R22以及R20,为什么不能是其他寄存器。这些寄存器都是protected_write_io函数的形参 [color=#f00000]movw r30, r24 [/color] // Load addr into Z [color=#f00000]out CCP, r22 [/color] // Start CCP handshake [color=#f00000]st Z, r20 [/color] // Write value to I/O register [color=#f00000]ret[/color] // Return to caller #elif defined(__IAR_SYSTEMS_ASM__) # if !defined(CONFIG_MEMORY_MODEL_TINY) && !defined(CONFIG_MEMORY_MODEL_SMALL) \ && !defined(CONFIG_MEMORY_MODEL_LARGE) # define CONFIG_MEMORY_MODEL_SMALL # endif # if defined(CONFIG_MEMORY_MODEL_LARGE) ldi r20, 0 out RAMPZ, r20 // Reset bits 23:16 of Z movw r30, r16 // Load addr into Z # elif defined(CONFIG_MEMORY_MODEL_TINY) ldi r31, 0 // Reset bits 8:15 of Z mov r30, r16 // Load addr into Z # else movw r30, r16 // Load addr into Z # endif # if defined(CONFIG_MEMORY_MODEL_TINY) out CCP, r17 // Start CCP handshake st Z, r18 // Write value to I/O register # elif defined(CONFIG_MEMORY_MODEL_SMALL) out CCP, r18 // Start CCP handshake st Z, r19 // Write value to I/O register # elif defined(CONFIG_MEMORY_MODEL_LARGE) out CCP, r19 // Start CCP handshake st Z, r20 // Write value to I/O register # else # error Unknown memory model in use, no idea how registers should be accessed # endif ret #else # error Unknown assembler #endif END_FUNC(protected_write_io) END_FILE()

    时钟配置 atmega4809 TE ST define model

    2793浏览量 1回复量 关注量
  • AT32F421是否支持位带操作

    在AT32F403A验证是可以的,但是使用芯片AT32F421时就没反应,不确定哪里的问题? #ifndef _IO_BIT_H_ #define _IO_BIT_H_ #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //IO 口地址映射 #define GPIOA_ODR_Addr (GPIOA_BASE+0x14) //0x40020014 #define GPIOB_ODR_Addr (GPIOB_BASE+0x14) //0x40020414 #define GPIOC_ODR_Addr (GPIOC_BASE+0x14) //0x40020814 #define GPIOD_ODR_Addr (GPIOD_BASE+0x14) //0x40020C14 #define GPIOE_ODR_Addr (GPIOE_BASE+0x14) //0x40021014 #define GPIOA_IDR_Addr (GPIOA_BASE+0x10) //0x40020010 #define GPIOB_IDR_Addr (GPIOB_BASE+0x10) //0x40020410 #define GPIOC_IDR_Addr (GPIOC_BASE+0x10) //0x40020810 #define GPIOD_IDR_Addr (GPIOD_BASE+0x10) //0x40020C10 #define GPIOE_IDR_Addr (GPIOE_BASE+0x10) //0x40021010 //IO 口操作,只对单一的IO 口,n 的值范围[0-15] #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //GPIOA 某一位输出 #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //GPIOA 某一位输入 #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //GPIOB 某一位输出 #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //GPIOB 某一位输入 #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //GPIOC 某一位输出 #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //GPIOC 某一位输入 #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //GPIOD 某一位输出 #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //GPIOD 某一位输入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //GPIOE 某一位输出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //GPIOE 某一位输入 #endif

    ADDR DDR AD define IO bitband

    1323浏览量 1回复量 关注量
  • SC95F8517模拟 IIC无应答

    #define IIC_SDA P16 #define IIC_SCL P15 #define READ_SDA P1CON &= 0xbf #define SDA_OUT() P1CON |= 0x40,P1PH |=0x40 #define SDA_IN() P1CON &= 0xbf,P1PH |=0x40 #define ADDR_PLF2105D 0x50 void delay_us( uint us) { uint x; for(x=us;x>0;x--); } void delay_ms(u16 nms) { u32 i; for(i=0;i250) { IIC_Stop(); return 1; } } IIC_SCL=0;//时钟输出0 return 0; } //产生ACK应答 void IIC_Ack(void) { IIC_SCL=0; SDA_OUT(); IIC_SDA=0; delay_us(6); IIC_SCL=1; delay_us(6); IIC_SCL=0; } //不产生ACK应答 void IIC_NAck(void) { IIC_SCL=0; SDA_OUT(); IIC_SDA=1; delay_us(6); IIC_SCL=1; delay_us(6); IIC_SCL=0; } //IIC发送一个字节 //返回从机有无应答 //1,有应答 //0,无应答 void IIC_Send_Byte(uchar txd) { uchar t; SDA_OUT(); IIC_SCL=0;//拉低时钟开始数据传输 for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(6); //对TEA5767这三个延时都是必须的 IIC_SCL=1; delay_us(6); IIC_SCL=0; delay_us(6); } } //读1个字节,ack=1时,发送ACK,ack=0,发送nACK uchar IIC_Read_Byte(uchar ack) { unsigned char i,receive=0; SDA_IN();//SDA设置为输入 for(i=0;i<8;i++ ) { IIC_SCL=0; delay_us(32); IIC_SCL=1; receive<<=1; if(READ_SDA)receive++; delay_us(16); } if (!ack) IIC_NAck();//发送nACK else IIC_Ack(); //发送ACK return receive; } //IIC连续写 //addr:器件地址 //reg:寄存器地址 //len:写入长度 //buf:数据区 //返回值:0,正常 // 其他,错误代码 uchar IIC_Write_Len(uchar addr,uchar len,uchar *buf) { uchar i; IIC_Start(); IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } for(i=0;i

    模拟 iic sd define ck AC

    1170浏览量 1回复量 关注量
  • GD32E505计算16位CRC不对啊 sos

    #define CRC_INITIAL_VALUE 0x0000 #define CRC_POLY_VALUE 0x1021 #define CRC_SET_CONTROL_REG CRC_CTLR = 0x09 // 输出数据不翻转,输入数据不翻转, 16位, 复位

    CRC define NEC Value ni

    1367浏览量 0回复量 关注量
  • RT-Thread中AT32F403A使用RTC

    RT-Thread Studio中开启RTC,根据官方说明(基于STM32),只要三步:搜索 [align=left]复制[/align] /** if you want to use rtc(hardware) you can use the following instructions. * * STEP 1, open rtc driver framework(hardware) support in the RT-Thread Settings file * * STEP 2, define macro related to the rtc * such as BSP_USING_ONCHIP_RTC * * STEP 3, modify your stm32xxxx_hal_config.h file to support rtc peripherals. define macro related to the peripherals * such as #define HAL_RTC_MODULE_ENABLED 但是第三步,需要在hal_config.h文件中修改,而AT32用的是STD库,没有这个文件,需要在哪里进行修改?

    RTC RT-Thread TE define

    1358浏览量 3回复量 关注量
  • 编译错误是什莫原因undefined identifier "OPTION"

    我在编译12f683编译时出现 undefined identifier "GODONE" undefined identifier "OPTION" 代码的逻辑没有错误,这个是什莫原因

    define OPTION 编译 ident 代码

    709浏览量 3回复量 关注量