ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
293509 Топик полностью
Точка опоры из дому (21.12.2011 13:09, просмотров: 1) ответил Вл.Шарнин на а SDCC не пробовали? Я не пробовал и не рекламирую, просто мне интересно выслушать возражения, если есть.
Пробовал для "бегущих светиков" на 89S8253. Бедненько, но опрятно и работоспособно. Хотя даже в этих 10 строчках нашёлся непонятный финт ушами. //Blah-blah-blah.#include// Стандартные типы данных#include// Размеры областй памяти, включая адреса I/O#include"test.h"intmain() __naked{unsigned charroller;roller = 0xEE;//P3 = 0xEE;TMOD = 0x01;TR0 = 0x01;// запуск таймера 0while (1){// Основной циклP3 = roller;roller >>= 1;if (roller != 0x77)roller += 0x80;/* Использование |=0x80 почему-то приводит к ошибке. Компилятор вместоконкретного регистра использует запись AR и даже попытка объявленияroller в _idata не отбивает ему охоту хранить переменную в регистре.*//*_asmmova,P3rrcamovP3,a_endasm;*/while (!TF0);TCON &= 0xDF;/* Использование "TF0=0" вместо "TCON&=0xDF" (приводит к коду сиспользованием JBC TF0,....) невозможно из-за errata на AT89S8253*/}}// EOF;--------------------------------------------------------; File Created by SDCC : free open source ANSI-C Compiler; Version 3.0.0 #6037 (Oct 31 2010) (MINGW32); This file was generated Sun Jul 24 13:00:02 2011;--------------------------------------------------------.module test.optsdcc -mmcs51 --model-small;--------------------------------------------------------; Public variables in this module;--------------------------------------------------------.globl _BREG_F7.globl _BREG_F6.globl _BREG_F5.globl _BREG_F4.globl _BREG_F3.globl _BREG_F2.globl _BREG_F1.globl _BREG_F0.globl _CY.globl _AC.globl _F0.globl _RS1.globl _RS0.globl _OV.globl _FL.globl _P.globl _TF2.globl _EXF2.globl _RCLK.globl _TCLK.globl _EXEN2.globl _TR2.globl _C_T2.globl _CP_RL2.globl _T2CON_7.globl _T2CON_6.globl _T2CON_5.globl _T2CON_4.globl _T2CON_3.globl _T2CON_2.globl _T2CON_1.globl _T2CON_0.globl _PT2.globl _PS.globl _PT1.globl _PX1.globl _PT0.globl _PX0.globl _RD.globl _WR.globl _T1.globl _T0.globl _INT1.globl _INT0.globl _TXD.globl _RXD.globl _P3_7.globl _P3_6.globl _P3_5.globl _P3_4.globl _P3_3.globl _P3_2.globl _P3_1.globl _P3_0.globl _EA.globl _ET2.globl _ES.globl _ET1.globl _EX1.globl _ET0.globl _EX0.globl _P2_7.globl _P2_6.globl _P2_5.globl _P2_4.globl _P2_3.globl _P2_2.globl _P2_1.globl _P2_0.globl _SM0.globl _SM1.globl _SM2.globl _REN.globl _TB8.globl _RB8.globl _TI.globl _RI.globl _SCK.globl _MISO.globl _MOSI.globl _SS.globl _T2EX.globl _T2.globl _P1_7.globl _P1_6.globl _P1_5.globl _P1_4.globl _P1_3.globl _P1_2.globl _P1_1.globl _P1_0.globl _TF1.globl _TR1.globl _TF0.globl _TR0.globl _IE1.globl _IT1.globl _IE0.globl _IT0.globl _P0_7.globl _P0_6.globl _P0_5.globl _P0_4.globl _P0_3.globl _P0_2.globl _P0_1.globl _P0_0.globl _ALE.globl _B.globl _A.globl _ACC.globl _SPCR.globl _PSW.globl _TH2.globl _TL2.globl _RCAP2H.globl _RCAP2L.globl _T2MOD.globl _T2CON.globl _SADEN.globl _IP.globl _IPH.globl _P3.globl _SPSR.globl _SADDR.globl _IE.globl _WDTCON.globl _WDTRST.globl _P2.globl _SBUF.globl _SCON.globl _EECON.globl _P1.globl _CLKREG.globl _AUXR.globl _TH1.globl _TH0.globl _TL1.globl _TL0.globl _TMOD.globl _TCON.globl _PCON.globl _SPDR.globl _DP1H.globl _DP1L.globl _DP0H.globl _DPH.globl _DP0L.globl _DPL.globl _SP.globl _P0.globl _main;--------------------------------------------------------; special function registers;--------------------------------------------------------.area RSEG (ABS,DATA).org 0x0000_P0=0x0080_SP=0x0081_DPL=0x0082_DP0L=0x0082_DPH=0x0083_DP0H=0x0083_DP1L=0x0084_DP1H=0x0085_SPDR=0x0086_PCON=0x0087_TCON=0x0088_TMOD=0x0089_TL0=0x008a_TL1=0x008b_TH0=0x008c_TH1=0x008d_AUXR=0x008e_CLKREG=0x008f_P1=0x0090_EECON=0x0096_SCON=0x0098_SBUF=0x0099_P2=0x00a0_WDTRST=0x00a6_WDTCON=0x00a7_IE=0x00a8_SADDR=0x00a9_SPSR=0x00aa_P3=0x00b0_IPH=0x00b7_IP=0x00b8_SADEN=0x00b9_T2CON=0x00c8_T2MOD=0x00c9_RCAP2L=0x00ca_RCAP2H=0x00cb_TL2=0x00cc_TH2=0x00cd_PSW=0x00d0_SPCR=0x00d5_ACC=0x00e0_A=0x00e0_B=0x00f0_ALE=0x008e;--------------------------------------------------------; special function bits;--------------------------------------------------------.area RSEG (ABS,DATA).org 0x0000_P0_0=0x0080_P0_1=0x0081_P0_2=0x0082_P0_3=0x0083_P0_4=0x0084_P0_5=0x0085_P0_6=0x0086_P0_7=0x0087_IT0=0x0088_IE0=0x0089_IT1=0x008a_IE1=0x008b_TR0=0x008c_TF0=0x008d_TR1=0x008e_TF1=0x008f_P1_0=0x0090_P1_1=0x0091_P1_2=0x0092_P1_3=0x0093_P1_4=0x0094_P1_5=0x0095_P1_6=0x0096_P1_7=0x0097_T2=0x0090_T2EX=0x0091_SS=0x0094_MOSI=0x0095_MISO=0x0096_SCK=0x0097_RI=0x0098_TI=0x0099_RB8=0x009a_TB8=0x009b_REN=0x009c_SM2=0x009d_SM1=0x009e_SM0=0x009f_P2_0=0x00a0_P2_1=0x00a1_P2_2=0x00a2_P2_3=0x00a3_P2_4=0x00a4_P2_5=0x00a5_P2_6=0x00a6_P2_7=0x00a7_EX0=0x00a8_ET0=0x00a9_EX1=0x00aa_ET1=0x00ab_ES=0x00ac_ET2=0x00ad_EA=0x00af_P3_0=0x00b0_P3_1=0x00b1_P3_2=0x00b2_P3_3=0x00b3_P3_4=0x00b4_P3_5=0x00b5_P3_6=0x00b6_P3_7=0x00b7_RXD=0x00b0_TXD=0x00b1_INT0=0x00b2_INT1=0x00b3_T0=0x00b4_T1=0x00b5_WR=0x00b6_RD=0x00b7_PX0=0x00b8_PT0=0x00b9_PX1=0x00ba_PT1=0x00bb_PS=0x00bc_PT2=0x00bd_T2CON_0=0x00c8_T2CON_1=0x00c9_T2CON_2=0x00ca_T2CON_3=0x00cb_T2CON_4=0x00cc_T2CON_5=0x00cd_T2CON_6=0x00ce_T2CON_7=0x00cf_CP_RL2=0x00c8_C_T2=0x00c9_TR2=0x00ca_EXEN2=0x00cb_TCLK=0x00cc_RCLK=0x00cd_EXF2=0x00ce_TF2=0x00cf_P=0x00d0_FL=0x00d1_OV=0x00d2_RS0=0x00d3_RS1=0x00d4_F0=0x00d5_AC=0x00d6_CY=0x00d7_BREG_F0=0x00f0_BREG_F1=0x00f1_BREG_F2=0x00f2_BREG_F3=0x00f3_BREG_F4=0x00f4_BREG_F5=0x00f5_BREG_F6=0x00f6_BREG_F7=0x00f7;--------------------------------------------------------; overlayable register banks;--------------------------------------------------------.area REG_BANK_0(REL,OVR,DATA).ds 8;--------------------------------------------------------; internal ram data;--------------------------------------------------------.area DSEG (DATA);--------------------------------------------------------; overlayable items in internal ram ;--------------------------------------------------------.areaOSEG (OVR,DATA);--------------------------------------------------------; Stack segment in internal ram ;--------------------------------------------------------.areaSSEG(DATA)__start__stack:.ds1;--------------------------------------------------------; indirectly addressable internal ram data;--------------------------------------------------------.area ISEG (DATA);--------------------------------------------------------; absolute internal ram data;--------------------------------------------------------.area IABS (ABS,DATA).area IABS (ABS,DATA);--------------------------------------------------------; bit data;--------------------------------------------------------.area BSEG (BIT);--------------------------------------------------------; paged external ram data;--------------------------------------------------------.area PSEG (PAG,XDATA);--------------------------------------------------------; external ram data;--------------------------------------------------------.area XSEG (XDATA);--------------------------------------------------------; absolute external ram data;--------------------------------------------------------.area XABS (ABS,XDATA);--------------------------------------------------------; external initialized ram data;--------------------------------------------------------.area XISEG (XDATA).area HOME (CODE).area GSINIT0 (CODE).area GSINIT1 (CODE).area GSINIT2 (CODE).area GSINIT3 (CODE).area GSINIT4 (CODE).area GSINIT5 (CODE).area GSINIT (CODE).area GSFINAL (CODE).area CSEG (CODE);--------------------------------------------------------; interrupt vector ;--------------------------------------------------------.area HOME (CODE)__interrupt_vect:ljmp__sdcc_gsinit_startup;--------------------------------------------------------; global & static initialisations;--------------------------------------------------------.area HOME (CODE).area GSINIT (CODE).area GSFINAL (CODE).area GSINIT (CODE).globl __sdcc_gsinit_startup.globl __sdcc_program_startup.globl __start__stack.globl __mcs51_genXINIT.globl __mcs51_genXRAMCLEAR.globl __mcs51_genRAMCLEAR.area GSFINAL (CODE)ljmp__sdcc_program_startup;--------------------------------------------------------; Home;--------------------------------------------------------.area HOME (CODE).area HOME (CODE)__sdcc_program_startup:lcall_main;return from main will lock upsjmp .;--------------------------------------------------------; code;--------------------------------------------------------.area CSEG (CODE);------------------------------------------------------------;Allocation info for local variables in function 'main';------------------------------------------------------------;roller Allocated to registers r2 ;------------------------------------------------------------;test.c:8: intmain() __naked{;-----------------------------------------; function main;-----------------------------------------_main:;naked function: no prologue.;test.c:10: roller = 0xEE;movr2,#0xEE;test.c:14: TMOD = 0x01;mov_TMOD,#0x01;test.c:15: TR0 = 0x01;// запуск таймера 0setb_TR0;test.c:17: while (1){// Основной цикл00107$:;test.c:18: P3 = roller;;test.c:19: roller >>= 1;mova,r2mov_P3,aclrcrrcamovr2,a;test.c:20: if (roller != 0x77)roller += 0x80;cjner2,#0x77,00115$sjmp00103$00115$:mova,#0x80adda,r2movr2,a;test.c:30: while (!TF0);00103$:jnb_TF0,00103$;test.c:31: TCON &= 0xDF;anl_TCON,#0xDFsjmp00107$;naked function: no epilogue..area CSEG (CODE).area CONST (CODE).area XINIT (CODE).area CABS (ABS,CODE)