Atmega16 的端口不起作用
Atmega16's PORTs don't work
我试图将七段显示器与 Atmega16 芯片及其解码器 (74ls47) 连接起来,并使用 ISR 增加它显示的值。 ISR 应该打开和关闭 LED,然后增加 SSD 的值,但它只会使 LED 闪烁,而 SSD 没有任何反应。
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "DIO.h"
unsigned int counter=0;
int main(void)
{
SREG |= (1<<7); //The Holy Gate
GICR |= (1<<7); //Enableing INT1
MCUCR |=(1<<2); //for INT1
MCUCR |=(1<<3); //for INT1
DDRC =0xFF;
PORTC =0;
DDRB |=(1<<0);
while (1)
{
}
}
ISR (INT1_vect)
{
digitalWrite('B', 0, 1);
_delay_ms(500);
digitalWrite('B', 0, 0);
if (counter <= 9) {
PORTC=counter;
counter++;
} else {
counter=0;
}
}
注意:digitalWrite 是在"DIO.h" 文件
中预定义的用于打开和关闭led 的函数
提前致谢。
好的,实际上我已经解决了它,但不知道它是如何工作的。我定义了 "counter" volatile。
我的错误:
volatile unsigned char counter = 0;
....
ISR (INT0_vect)
{
if (counter <= 9) {
PORTC=counter;
counter++;}
else {
counter=0;}
}
int main (void)
{
....
while(1)
{
}
}
更正后的代码:
volatile unsigned char counter ;
....
ISR (INT0_vect)
{
if (counter <= 9) {
PORTC=counter;
counter++;}
else {
counter=0;}
}
int main (void)
{
....
counter=0;
while(1)
{
}
}
我试图将七段显示器与 Atmega16 芯片及其解码器 (74ls47) 连接起来,并使用 ISR 增加它显示的值。 ISR 应该打开和关闭 LED,然后增加 SSD 的值,但它只会使 LED 闪烁,而 SSD 没有任何反应。
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "DIO.h"
unsigned int counter=0;
int main(void)
{
SREG |= (1<<7); //The Holy Gate
GICR |= (1<<7); //Enableing INT1
MCUCR |=(1<<2); //for INT1
MCUCR |=(1<<3); //for INT1
DDRC =0xFF;
PORTC =0;
DDRB |=(1<<0);
while (1)
{
}
}
ISR (INT1_vect)
{
digitalWrite('B', 0, 1);
_delay_ms(500);
digitalWrite('B', 0, 0);
if (counter <= 9) {
PORTC=counter;
counter++;
} else {
counter=0;
}
}
注意:digitalWrite 是在"DIO.h" 文件
中预定义的用于打开和关闭led 的函数提前致谢。
好的,实际上我已经解决了它,但不知道它是如何工作的。我定义了 "counter" volatile。
我的错误:
volatile unsigned char counter = 0;
....
ISR (INT0_vect)
{
if (counter <= 9) {
PORTC=counter;
counter++;}
else {
counter=0;}
}
int main (void)
{
....
while(1)
{
}
}
更正后的代码:
volatile unsigned char counter ;
....
ISR (INT0_vect)
{
if (counter <= 9) {
PORTC=counter;
counter++;}
else {
counter=0;}
}
int main (void)
{
....
counter=0;
while(1)
{
}
}