Académique Documents
Professionnel Documents
Culture Documents
Como este número suele ser muy superior en el caso de los Procesadores y Memorias donde las
capacidades son muy altas, ya no se utiliza a la unidad básica para referenciar, sino que se
recurre a sus múltiplos equivalentes, encontrándose los siguientes, en una equivalencia:
Hz - Hertzios: 1
BASIC
Código en Basic
inicio:
HIGH portb.1
PAUSE 500
LOW portb.1
PAUSE 500
GOTO inicio
END
C
Código en C
#include <18f4550.h>
#fuses
HS,MCLR,CCP2B3,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NO
DEBUG,NOWRT,NOVREGEN
#use delay(clock=20000000)
////////////////////////////////////////////////////////////////////////////////////
//
// Defines y Constantes
//
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////
#int_rtcc
void handle_rtcc_int(){
Set_timer0(181);
Main
void main() {
disable_interrupts(int_rda);
disable_interrupts(int_ext);
disable_interrupts(int_ext1);
disable_interrupts(int_ext2);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_0(RTCC_OFF);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
delay_ms(333);
enable_interrupts(int_rtcc);
do {
} while (TRUE);
CBLOCK 0x0C
ENDC
; ZONA DE CÓDIGOS
********************************************************************
ORG 0
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
bcf Salida ; Esta línea se configura como
salida.
movlw b'00000000'
movwf OPTION_REG ; Prescaler de 2 para el TMR0
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
bsf Salida ; La salida pasa a nivel alto
call Timer0_500us ; durante este tiempo.
nop ; Dos ciclos mediante "nop" para
compensar
nop ; la instrucción "goto
Principal" del nivel bajo.
bcf Salida ; La salida pasa a nivel bajo
call Timer0_500us ; durante este tiempo.
goto Principal
;
; Subrutina "Timer0_500us" -------------------------------------------
------------
;
; Con el simulador se comprueba que se obtienen unos tiempos para la
onda cuadrada
; de 1kHz exactos, 500 µs tanto para el nivel alto como para el bajo.
;
TMR0_Carga500us EQU -d'242' ; Este valor se ha obtenido
experimentalmente
; con ayuda del simulador del
MPLAB.
Timer0_500us
nop ; Algunos "nop" para ajustar a
500 µs exactos.
nop
movlw TMR0_Carga500us ; Carga el Timer 0.
movwf TMR0
bcf INTCON,T0IF ; Resetea el flag de
desbordamiento del TMR0.
Timer0_Rebosamiento
btfss INTCON,T0IF ; ¿Se ha producido
desbordamiento?
goto Timer0_Rebosamiento ; Todavía no. Repite.
return
END
Capturas de simulación de programa en Lenguaje Ensamblador
CONCLUSIONES
El retomar en el decimo cuatrimestre el lenguaje de programación C ha sido interesante, sin
embargo, ha sido un reto programar en ensamblador puesto que durante toda la carrera no se
había tocado ese lenguaje de programación, así mismo basic.