?? tarea 1.c~
/*
Tarea 1
"Encoder"
Diseno de Sistema de Computadoras
Presentado por:
Raymundo Yoshiro Yamamoto Palacios
2004-0081
Para:
Prof. Marlon Hiraldo
*/
/*
Agregrando libreria del atmega16
*/
#include <mega16.h>
/*
Esta seccion del codigo es para definir los numeros que se van a presentar
*/
// Organizacion del Puerto A y Segmentos
// +--+--+--+--+--+--+--+--+
// |dp|g |f |e |d |c |b |a |
// +--+--+--+--+--+--+--+--+
//
// Organizacion del Puerto B y Display
// +--+--+--+--+--+--+--+--+
// | | | | |S3|S2|S1|S0|
// +--+--+--+--+--+--+--+--+
//
// DISPLAY
// A
// ----
// F | |B
// | G |
// ----
// E | |C
// | D |
// ----
// pgfedcba
flash unsigned char tabla_dig[]={0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
0b01110111, // A
0b01111100, // B
0b00111001, // C
0b01011110, // D
0b01111001, // E
0b01110001};// F
/*
Declarando variables a usar.
La variable lugar es una arreglo que contiene los valores
respectivos para saber cuando se incrementa o decrementa.
*/
unsigned char disp = 0;
unsigned char nuevo = 0;
unsigned char viejo = 0;
unsigned int puntero = 0;
unsigned int numero = 0;
unsigned char lugar[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};
/*
La siguiente interrupcion sirve para el funcionamiento de la
visualizacion dinamica.
*/
interrupt [TIM0_COMP] void isr_timer0()
{
PORTB = 0xf0;
PORTA = tabla_dig[(numero >> disp * 4) & 0x0f];
PORTB = 1 << disp;
disp = (++disp & 0x01);
}
/*
Las siguientes dos interrupciones son las que se ejecutan cuando
hay algun cambio en los phototransistores.
La INT0 representa el phototransistor A y la INT1 el B
*/
interrupt [EXT_INT0] void isr_ext0()
{
nuevo = (PIND >> 2) & 0x03;
puntero = (viejo << 2 | nuevo);
numero = numero + lugar[puntero];
viejo = nuevo;
}
interrupt [EXT_INT1] void isr_ext1()
{
nuevo = (PIND >> 2) & 0x03;
puntero = (viejo << 2 | nuevo);
numero = numero + lugar[puntero];
viejo = nuevo;
}
/*
En el main se programan los puertos, el prescaler, las interrupciones
y tambien se activan las interrupciones.
Como se desea que el programa no termine se coloca un ciclo infinito al final
*/
main()
{
DDRA = 0xFF; // PORTA OUT[0..7]
DDRB = 0x0F; // PORTB OUT[0..3] IN[4..7]
DDRD = 0x00; // PORTD IN[0..7]
TCCR0 = 0b00001100; // timer0 CTC pre/256
TIMSK = 0b00000010; // timer0 int cm enable
MCUCR |= 0b00000101; // int0 int on rising edge
GICR |= 0b11000000; // int0 int enable
OCR0 = 32; // display
SREG |= 0x80; // global int enable
nuevo = (PORTD >> 2) & 0x03; // posicion inicial
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -