博文

〖004〗模60计数器BCD码输出 [AHDL](2006-10-02 10:22:00)

摘要:qh[3..0]、ql[3..0]分别输出高位和低位的BCD码。 subdesign bcd_m60(    clk, cr, en               : input;    qh[3..0], ql[3..0], c0    : output;)variable    counth[3..0], countl[3..0]: dff; begin    counth[].clk = clk;    countl[].clk = clk;    counth[].clrn = cr;    countl[].clrn = cr;    qh[] = counth[];    ql[] = countl[];        if en then        if countl[] < 9 then            countl[] = countl[] + 1;            counth[] = counth[];            c0 = gnd;        elsif counth[] < 5 then    &......

阅读全文(13527) | 评论:1

〖004〗 7段译码器 [AHDL](2006-09-27 17:13:00)

摘要:课上老师讲的, 真值表方式:SUBDESIGN 7seg(    i[3..0]             : INPUT;    a, b, c, d, e, f, g : OUTPUT;) BEGIN     TABLE        i[3..0] => a, b, c, d, e, f, g;             0  => 0, 0, 0, 0, 0, 0, 1;             1  => 1, 0, 0, 1, 1, 1, 1;             2  => 0, 0, 1, 0, 0, 1, 0;             3  => 0, 0, 0, 0, 1, 1, 0;             4  => 1, 0, 0, 1, 1, 0, 0;             5  => 0, 1, 0, 0, 1, 0, 0;          &nb......

阅读全文(11912) | 评论:0

<012> WinAVR中sbi()和cbi()函数编译报错的解决(2006-09-13 17:58:00)

摘要:今天在用WinAVR的20050214版本时发现编译无法通过,不能识别sbi()和cbi()函数。论坛里查了一下,原来是这个版本里没有定义这两个函数。(查看 帖1, 帖2)看了一下, 大概有三种方法解决: <1> #ifndef sbi      #define sbi(reg,bit)   reg |= (_BV(bit))  #endif #ifndef cbi      #define cbi(reg,bit)   reg &= ~(_BV(bit))  #endif<2> #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))<3>#define sbi(x, y)  (x |= (1 << y))   /*置位寄器x的第y位*/#define clr(x, y)  (x &= ~(1 <<y ))  /*清零寄器x的第y位*/ ★其实前两种方法追根溯源还是用的第三种方法, 因为_BV是用<<定义的。 可以在WinAVR的安装目录下\include\avr中找到一个sfr_defs.h文件,里面有对_BV的定义: #define _BV(bit) (1 << (bit))觉得还是用第3种方法比较直观, 也是本质, 所以决定以后就用它定义。 ......

阅读全文(14268) | 评论:3

<011> TCCR0 值与计数器0触发条件的关系 [AVR](2006-09-08 13:40:00)

摘要:    所谓计数器,即是在规定时间内对输入信号的脉冲个数进行计算的模块。PB0为计数器0的输入端口,因此,使用计数器时,必须将PB0设为输入。计数器的使用与定时器十分相似,每次输入信号的上升沿(或下降沿)出现时,TCNT0就自加,当自加到0xFF以后,再次自加就会溢出。与定时器一样,TCNT0溢出时TIFR中的TOV0就置1。    输入信号是上升沿还是下降沿触发计数器,是由TCCR0控制的。┌─────┬──────────────┐ㄧ TCCR0 值 ㄧ          触发方式          ㄧ├─────┼──────────────┤ㄧ    5     ㄧ 输入信号的下降沿触发计数器 ㄧ├─────┼──────────────┤ㄧ    6     ㄧ 输入信号的上升沿触发计数器 ㄧ└─────┴──────────────┘ 《AVR单片机与CPLD/FPGA综合应用入门》......

阅读全文(13174) | 评论:0

<010> TCCR0 与预分频数的关系 [AVR](2006-09-07 13:17:00)

摘要:所谓"预分频",就是该时钟是由晶振时钟分频得到的。预分频数可以是1、8、64、256、1024。假设预分频数为8,则每8个晶振时钟周期后,TCNT0的值自加1。预分频数由寄存器TCCR0控制。┌─────┬─────────┐ㄧ TCCR0 值 ㄧ 预分频后时钟频率 ㄧ├─────┼─────────┤ㄧ    1     ㄧ       fosc       ㄧ├─────┼─────────┤ㄧ    2     ㄧ      fosc/8      ㄧ├─────┼─────────┤ㄧ    3     ㄧ     fosc/64      ㄧ├─────┼─────────┤ㄧ    4     ㄧ     fosc/256     ㄧ├─────┼─────────┤ㄧ    5     ㄧ     fosc/1024    ㄧ└─────┴─────────┘ 《AVR单片机与CPLD/FPGA综合应用入门》......

阅读全文(12469) | 评论:0

<009> MCUCR 中关于INT0的中断触发条件 [AVR](2006-09-07 13:02:00)

摘要:ATmega16L 共有3个外部中断(INT0:PD2,INT1:PD3,INT2:PB2),MCUCR寄存器可以控制外部中断的触发条件(INT2只能沿触发)。MCUCR中的ISC01和ISC00用来控制INT0的中断触发条件。┌────┬────┬───────────────────────┐ㄧ ISC11  ㄧ ISC10  ㄧ                   说明                       ㄧ├────┼────┼───────────────────────┤ㄧ   0    ㄧ   0    ㄧINT0上的低电平产生中断请求                    ㄧ├────┼────┼───────────────────────┤ㄧ   0    ㄧ   1    ㄧINT0上的电平变化(高到低或低到高)产生中断请求  ㄧ├────┼────┼───────────────────────┤ㄧ   1    ㄧ   0    ㄧINT0上的下降沿产生中断请求              &n......

阅读全文(12110) | 评论:0

<008> MCUCR 中关于INT1的中断触发条件 [AVR](2006-09-07 12:59:00)

摘要:ATmega16L 共有3个外部中断(INT0:PD2,INT1:PD3,INT2:PB2),MCUCR寄存器可以控制外部中断的触发条件(INT2只能沿触发)。MCUCR中的ISC11和ISC10用来控制INT1的中断触发条件。┌────┬────┬───────────────────────┐ㄧ ISC11  ㄧ ISC10  ㄧ                   说明                       ㄧ├────┼────┼───────────────────────┤ㄧ   0    ㄧ   0    ㄧINT1上的低电平产生中断请求                    ㄧ├────┼────┼───────────────────────┤ㄧ   0    ㄧ   1    ㄧINT1上的电平变化(高到低或低到高)产生中断请求  ㄧ├────┼────┼───────────────────────┤ㄧ   1    ㄧ   0    ㄧINT1上的下降沿产生中断请求              &n......

阅读全文(12110) | 评论:0

<005> GCC中的整型类型名 [AVR](2006-09-07 12:03:00)

摘要:标准C的变量类型一般都适用于单片机的C语言,如char、float、double、unsigned int 等。经常使用的整型在头文件 <inttypes.h> 中作了定义。 ┌──────┬──────┬──────────────┐ㄧ   类型名   ㄧ 长度/字节  ㄧ         数值范围           ㄧ├──────┼──────┼──────────────┤ㄧ   int8_t   ㄧ 1( 8 bits) ㄧ        -128~127           ㄧ├──────┼──────┼──────────────┤ㄧ  uint8_t   ㄧ 1( 8 bits) ㄧ          0~255            ㄧ├──────┼──────┼──────────────┤ㄧ  int16_t   ㄧ 2(16 bits) ㄧ      -32768~32767         ㄧ├──────┼──────┼──────────────┤ㄧ uint16_t   ㄧ 2(16 bits) ㄧ         0~65535     &nbs......

阅读全文(11918) | 评论:0

<004> 高阻、上拉、下拉(2006-09-07 12:01:00)

摘要:    所谓高阻,可以简单理解为输出端处于浮空状态(没有电流流动),其电平随外部电平高低而定,即门电路放弃对输出端电路的控制。而上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。下拉同理,只不过上拉是对器件注入电流,下拉是输出电流。至于弱上拉和强上拉,只是上拉电阻的阻值不同,没有什么严格区分。简言之,上拉就是在端口没有输入的情况下,将端口的电平稳定在高电平。 《AVR单片机与CPLD/FPGA综合应用入门》......

阅读全文(12387) | 评论:2

<002> 时钟源与熔丝位的关系 [AVR](2006-09-07 11:57:00)

摘要:┌────────────┬──────────┐ㄧ    时钟源              ㄧ  熔丝位 CKSEL3..0  ㄧ├────────────┼──────────┤ㄧ 外部晶体/陶瓷振荡电路  ㄧ    1111~1010      ㄧ├────────────┼──────────┤ㄧ 外部低频晶体振荡器     ㄧ    1001            ㄧ├────────────┼──────────┤ㄧ 外部RC振荡器           ㄧ    1000~0101      ㄧ├────────────┼──────────┤ㄧ 内部RC振荡器           ㄧ    0100~0001      ㄧ├────────────┼──────────┤ㄧ 外部时钟               ㄧ    0000            ㄧ└────────────┴──────────┘ 《AVR单片机与CPLD/FPGA综合应用入门》......

阅读全文(3636) | 评论:1