发新帖本帖赏金 10.00元(功能说明)我要提问
1234
返回列表
打印

【8月话题】——扒扒扒,我也曾被编程虐成狗

[复制链接]
楼主: 21ic小喇叭
手机看帖
扫描二维码
随时随地手机跟帖
61
351357741| | 2015-8-31 19:54 | 只看该作者 回帖奖励 |倒序浏览
正准备被代码虐,高中时被各种算法虐过千遍,现在后悔没有**住。。。。

使用特权

评论回复
62
Dongfangyuxiao| | 2015-8-31 20:53 | 只看该作者
大秦正声 发表于 2015-8-5 15:30
上51编程实验的时候用按键输入十六制机器码

俺也是呀!一节课都输不完一个实验程序。

使用特权

评论回复
63
光光ing| | 2015-9-1 21:33 | 只看该作者
写程序一年,现在就在被虐,中颖51单片机keil平台移植到stm8 iar平台上。

使用特权

评论回复
64
cjseng| | 2015-9-2 10:00 | 只看该作者
我也来贴一个10年前做的东西,定义没一个变量,分配RAM可是个技术活,用着用着就不够了
***************************************
;                                       *
;------集中协调式信号机主机面板程序-----*
;               (可联网)                *
;             开机发送参数              *
;              2005.10.05               *
;                                       *
;****************************************
;TY-01是基于串口通讯的信号机,通讯包括:
;1。主控板与灯驱板的双向通讯;
;2。主控板与倒计时显示屏的单向通讯;
;3。主控板与上位机的双向通讯。
;波特率:2400、8位、无校验、一个停止位。
;*******I/O定义********
      AOUT   BIT P3.5        ;蜂鸣器
      WTD    BIT P3.2        ;看门狗
      CS128  BIT P1.0        ;628128片选
      CS8255 BIT P1.1        ;8255片选
      CS887  BIT P1.2        ;12887片选
      HSECO    BIT 00H       ;半秒标志
      BADCLK   BIT 01H       ;时钟坏标志
      BAK      BIT 02H       ;备份标志
      AUTOK    BIT 03H       ;按键长按标志
      SETUP    BIT 04H       ;设置参数标志
      EN_CHKTIME BIT 05H     ;允许检测时间段
      MANUAL     BIT 06H     ;手动标志
      DOT_DJS    BIT 07H     ;显示倒计时信息时自动加上小数点
      SPE_DAY   BIT 21H.0    ;特殊工作日标志
      WEEK_DAY  BIT 21H.1    ;双休日标志
      CABLELESS BIT 21H.2    ;无电缆联动标志
      VEHICLE   BIT 21H.3    ;感应标志
      ADAPTIVE  BIT 21H.4    ;自适应标志
      FIXEDTIME BIT 21H.5    ;多时段标志
      YELS      BIT 21H.6    ;黄闪标志
      SHUT      BIT 22H.7    ;关灯标志
      XGFS      BIT 22H.0    ;参数修改方式
      EN_REV    BIT 22H.1    ;允许接收标志
      MANR00    BIT 22H.2    ;上一次人行红灯标志0
      MANR20    BIT 22H.3    ;下一次人行红灯标志0
      LED_R     BIT 22H.4    ;红色指示灯
      LED_G     BIT 22H.5    ;绿色指示灯
      GRNR1   BIT 23H.0      ;右转绿灯标志
      MANR10  BIT 23H.1      ;当前人行红灯标志0
      MANG10  BIT 23H.2      ;当前人行绿灯标志0
      MANR11  BIT 23H.3      ;当前人行红灯标志1
      MANG11  BIT 23H.4      ;当前人行绿灯标志1
      MANG00  BIT 23H.5      ;上一次人行绿灯标志0
      MANG20  BIT 23H.6      ;下一次人行绿灯标志0
      REDL1   BIT 25H.0      ;左转红灯标志
      YELL1   BIT 25H.1      ;左转黄灯标志
      GRNL1   BIT 25H.2      ;左转绿灯标志
      REDD1   BIT 25H.3      ;直行红灯标志
      YELD1   BIT 25H.4      ;直行黄灯标志
      GRND1   BIT 25H.5      ;直行绿灯标志
      REDR1   BIT 25H.6      ;右转红灯标志
      YELR1   BIT 25H.7      ;右转黄灯标志
      ELR     BIT 26H.0      ;东左转红灯
      ELY     BIT 26H.1      ;东左转黄灯
      EL      BIT 26H.2      ;东左转绿灯
      EDR     BIT 26H.3      ;东直行红灯
      EDY     BIT 26H.4      ;东直行黄灯
      ED      BIT 26H.5      ;东直行绿灯
      ERR     BIT 26H.6      ;东右转红灯
      ERY     BIT 26H.7      ;东右转黄灯
      ER      BIT 27H.0      ;东右转绿灯
      EMR0    BIT 27H.1      ;东人行红灯0
      EMG0    BIT 27H.2      ;东人行绿灯0
      EMR1    BIT 27H.3      ;东人行红灯1
      EMG1    BIT 27H.4      ;东人行绿灯1
      SLR     BIT 28H.0      ;南左转红灯
      SLY     BIT 28H.1      ;南左转黄灯
      SL      BIT 28H.2      ;南左转绿灯
      SDR     BIT 28H.3      ;南直行红灯
      SDY     BIT 28H.4      ;南直行黄灯
      SD      BIT 28H.5      ;南直行绿灯
      SRR     BIT 28H.6      ;南右转红灯
      SRY     BIT 28H.7      ;南右转黄灯
      SR      BIT 29H.0      ;南右转绿灯
      SMR0    BIT 29H.1      ;南人行红灯0
      SMG0    BIT 29H.2      ;南人行绿灯0
      SMR1    BIT 29H.3      ;南人行红灯1
      SMG1    BIT 29H.4      ;南人行绿灯1
      WLR     BIT 2AH.0      ;西左转红灯
      WLY     BIT 2AH.1      ;西左转黄灯
      WL      BIT 2AH.2      ;西左转绿灯
      WDR     BIT 2AH.3      ;西直行红灯
      WDY     BIT 2AH.4      ;西直行黄灯
      WD      BIT 2AH.5      ;西直行绿灯
      WRRR    BIT 2AH.6      ;西右转红灯
      WRY     BIT 2AH.7      ;西右转黄灯
      WRR     BIT 2BH.0      ;西右转绿灯
      WMR0    BIT 2BH.1      ;西人行红灯0
      WMG0    BIT 2BH.2      ;西人行绿灯0
      WMR1    BIT 2BH.3      ;西人行红灯1
      WMG1    BIT 2BH.4      ;西人行绿灯1
      NLR     BIT 2CH.0      ;北左转红灯
      NLY     BIT 2CH.1      ;北左转黄灯
      NL      BIT 2CH.2      ;北左转绿灯
      NDR     BIT 2CH.3      ;北直行红灯
      NDY     BIT 2CH.4      ;北直行黄灯
      ND      BIT 2CH.5      ;北直行绿灯
      NRR     BIT 2CH.6      ;北右转红灯
      NRY     BIT 2CH.7      ;北右转黄灯
      NR      BIT 2DH.0      ;北右转绿灯
      NMR0    BIT 2DH.1      ;北人行红灯0
      NMG0    BIT 2DH.2      ;北人行绿灯0
      NMR1    BIT 2DH.3      ;北人行红灯1
      NMG1    BIT 2DH.4      ;北人行绿灯1
      GRNL0   BIT 2EH.1      ;上一次左转绿灯标志
      GRND0   BIT 2EH.2      ;上一次直行绿灯标志
      GRNR0   BIT 2EH.3      ;上一次右转绿灯标志
      GRNL2   BIT 2EH.4      ;下一次左转绿灯标志
      GRND2   BIT 2EH.5      ;下一次直行绿灯标志
      GRNR2   BIT 2EH.6      ;下一次右转绿灯标志
      ALL_RED BIT 2EH.7      ;清场红灯标志
;******显示缓冲区*******
      DIS8 EQU 26H          ;指示灯组0
      DIS9 EQU 27H          ;指示灯组1
      DISA EQU 28H          ;指示灯组2
      DISB EQU 29H          ;指示灯组3
      DISC EQU 2AH          ;指示灯组4
      DISD EQU 2BH          ;指示灯组5
      DISE EQU 2CH          ;指示灯组6
      DISF EQU 2DH          ;指示灯组7
      DIS0 EQU 2FH          ;数码管0
      DIS1 EQU 30H          ;数码管1
      DIS2 EQU 31H          ;数码管2
      DIS3 EQU 32H          ;数码管3
      DIS4 EQU 33H          ;数码管4
      DIS5 EQU 34H          ;数码管5
      DIS6 EQU 35H          ;数码管6
      DIS7 EQU 36H          ;数码管7
      DISS0 EQU 37H         ;数码管闪烁位控制
      DIS0BAK EQU 38H       ;数码管0备份
      DIS1BAK EQU 39H       ;数码管1备份
      DIS2BAK EQU 3AH       ;数码管2备份
      DIS3BAK EQU 3BH       ;数码管3备份
      DIS4BAK EQU 3CH       ;数码管4备份
      DIS5BAK EQU 3DH       ;数码管5备份
      DIS6BAK EQU 3EH       ;数码管6备份
      DIS7BAK EQU 3FH       ;数码管7备份
      T2MOD   EQU 0C9H      ;P89C51RD+特殊寄存器
;******时间参数******
      SECO  EQU 40H          ;秒
      MINU  EQU 41H          ;分
      HOUR  EQU 42H          ;时
      DAY   EQU 43H          ;日
      MONTH EQU 44H          ;月
      YEAR  EQU 45H          ;年
      WEEK  EQU 46H          ;星期
;******常用参数******
      D500  EQU 47H               ;延时0.50S计数
      KBAK  EQU 48H               ;键值备份
      KEYC  EQU 49H               ;消抖计数
      MODEC EQU 4AH               ;MODE按键计数
      NEXTC EQU 4BH               ;NEXT/PREV键计数
      SJZZ  EQU 4CH               ;数据指针
      ADDRH EQU 4DH               ;目标地址高位
      ADDRL EQU 4EH               ;目标地址低位
      RANC_PAGE EQU 4FH           ;PAGE键循环计数
      PAGEC     EQU 50H           ;PAGE键计数
      RANC_MODE EQU 51H           ;MODE按键循环次数
      RANC_NEXT EQU 52H           ;PREV、NEXT按键循环次数
      RANC_H    EQU 53H           ;参数上限
      RANC_L    EQU 54H           ;参数下限
      TOT_TIME  EQU 55H           ;当前步序持续时间
      DJS_CLOUR EQU 56H           ;当前倒计时颜色
      TOT_SD    EQU 57H           ;当前工作日时间段个数
      NUMB      EQU 58H           ;数据缓冲区长度
      REPEAT    EQU 59H           ;重复次数
      DISPITEM  EQU 5AH           ;显示内容定义
      DISP_CHANGE EQU 5BH         ;显示内容延时改变计数
      ADDRHBAK    EQU 5CH         ;源地址高位备份
      ADDRLBAK    EQU 5DH         ;源地址低位备份
      TEST0       EQU 5EH
      TEST1       EQU 5FH
      FLASH_GRN   EQU 60H         ;绿闪时间
      COUNT_SEND  EQU 61H         ;发送计数
      COUNT_REV   EQU 62H         ;接收计数
      ZZBAK       EQU 63H         ;指针备份
      ENTERC      EQU 64H         ;ENTER键计数
      RANC_ENTER  EQU 65H         ;ENTER键循环计数
      STATE_LAMP  EQU 66H         ;状态指示灯
      PLAN_DEF    EQU 67H         ;方案号
      Y15S        EQU 68H         ;开机黄闪持续时间
      R05S        EQU 69H         ;开机清场红灯时间
      MODEPLAN    EQU 6AH         ;工作方式、相位方案
      LAMP_E      EQU 6BH         ;东面倒计时有效灯色
      LAMP_S      EQU 6CH         ;南面倒计时有效灯色
      LAMP_W      EQU 6DH         ;西面倒计时有效灯色
      LAMP_N      EQU 6EH         ;北面倒计时有效灯色
      OADDRH      EQU 70H         ;目标地址高位
      OADDRL      EQU 71H         ;目标地址低位
      NUMBH       EQU 70H         ;发送字节数高位(重复定义)
      NUMBL       EQU 71H         ;发送字节数低位(重复定义)
      SJZC        EQU 72H         ;数据指针
      COMM        EQU 72H         ;命令(重复定义)
      DS00        EQU 73H         ;临时灯色
      DS01        EQU 74H         ;临时灯色
      DS10        EQU 75H         ;临时灯色
      DS11        EQU 76H         ;临时灯色
      DS20        EQU 77H         ;临时灯色
      DS21        EQU 78H         ;临时灯色
      XWH         EQU 79H         ;相位号
      STEP        EQU 7AH         ;步序
      REMAIN      EQU 7BH         ;剩余时间
      TOT_STEP    EQU 7CH         ;步序总数
      TOT_XW      EQU 7DH         ;相位总数
      VADDRH      EQU 7EH         ;接收缓冲区地址高位
      VADDRL      EQU 7FH         ;接收缓冲区地址低位
;*******字形模块*******
      AA     EQU  0AH             ;A
      BB     EQU  0BH             ;B
      CC     EQU  0CH             ;C
      DD     EQU  0DH             ;D
      EE     EQU  0EH             ;E
      FF     EQU  0FH             ;F
      GG     EQU  12H             ;G
      HH     EQU  15H             ;H
      II     EQU  1EH             ;I
      JJ     EQU  1FH             ;J
      KK     EQU  20H             ;K
      LL     EQU  1BH             ;L
      MM     EQU  1CH             ;M
      NN     EQU  16H             ;N
      OO     EQU  21H             ;O
      PP     EQU  22H             ;P
      QQ     EQU  23H             ;Q
      RRR    EQU  14H             ;R
      SS     EQU  05H             ;S
      TT     EQU  1AH             ;T
      UU     EQU  1DH             ;U
      VV     EQU  1DH             ;V
      WW     EQU  24H             ;W
      XX     EQU  25H             ;X
      YY     EQU  13H             ;Y
      ZZ     EQU  26H             ;Z
      XHX    EQU  27H             ;_,下划线
      AN     EQU  10H             ;暗
      GANG   EQU  11H             ;-
      SHX    EQU  28H             ;~,上划线
;******程序开始******
      ORG 0000H
      SJMP MAIN
      ORG 000BH
      LJMP COUNT0
      ORG 0023H
      LJMP TXRX
      ORG 002BH
      LJMP TIM2
;******主程序******
      ORG 0030H
MAIN: CLR EA
      CLR A
      MOV R0,A
RAMX: MOV @R0,A              ;清AT89C52-RAM区
      DJNZ R0,RAMX
      MOV SP,#0C0H           ;堆栈
      LCALL WAITE            ;延时等待各部件就绪
      LCALL WAITE
      LCALL WAITE
      LCALL WAITE
      LCALL WAITE
      CLR AOUT               ;关蜂鸣器
      SETB YELS              ;开机自动黄闪
      SETB ALL_RED           ;黄闪后自动四面红灯
      MOV ADDRH,#00H
      MOV ADDRL,#01H
      LCALL READBYTE
      MOV R05S,A
      INC ADDRL
      LCALL READBYTE
      MOV Y15S,A
      CLR EN_CHKTIME         ;开机默认工作于手动方式,不允许检测时间段
      LCALL INIT0            ;初始化
      MOV SCON,#11010000B    ;方式3
      MOV TMOD,#00100000B    ;8位自动重装
      MOV TL1,#0F3H          ;2400波特率
      MOV TH1,#0F3H
      SETB TR1               ;启动定时器1
      SETB ES                ;允许串口中断
      CLR EA
      LCALL SEND_PARA        ;发送本机所有参数
      SETB EA
      MOV VADDRH,#48H
      MOV VADDRL,#00H
      LCALL DEFAULT          ;根据需要,自动装载默认参数
      MOV D500,#25           ;半秒计数
      MOV DISS0,#00H         ;开机默认无闪烁位
      MOV DISPITEM,#34H      ;显示时、分、秒
      MOV STATE_LAMP,#03H    ;默认工作于多时段
      MOV ENTERC,#03         ;默认工作于多时段方式
      MOV RANC_ENTER,#06H
      MOV DISP_CHANGE,#01H   ;默认无提示符
      SETB MANUAL
      LCALL TIME             ;读取当前时间
      LCALL TIMER
      MOV ADDRH,#32H
      MOV ADDRL,#0A6H
      LCALL READBYTE
      CJNE A,#55H,PRODUCE
      LJMP NOFIRST
PRODUCE:LCALL FACTORY
NOFIRST:
      LCALL X4200            ;开机消除上一次灯色信息
      SETB P1.4              ;选通8255-C口
      CLR P1.5
      CLR CS8255
      MOVX A,@R0             ;读取按键状态
      SETB CS8255
      JB ACC.0,LOOP0         ;开机时如果已按下MODE键,进入设置参数状态
      MOV MODEC,#255
      MOV RANC_MODE,#10
      SETB SETUP
      LJMP LOOP1
LOOP0: JB ACC.6,LOOP1        ;开机时如果已按下ENTER键,
                             ;调用默认参数并进入设置参数状态
       LCALL LD_DEFT         ;调用默认参数
       LCALL PLAN_POST0      ;自动方案处理
       MOV MODEC,#255
       MOV RANC_MODE,#10
       SETB SETUP
LOOP1: LCALL DISP            ;显示
       CPL WTD
       SJMP LOOP1
COUNT0:RETI

使用特权

评论回复
65
ocon| | 2015-9-10 15:19 | 只看该作者
20年前就是1995年,那时候俺在大学研究所里混,周围已经没人用Z80了,至少都是MCS51、摩托罗拉的准16位什么的,俺从那时开始接触用BASIC编程的PIC单片机,只是入门玩玩,后来做项目还是得用汇编。

使用特权

评论回复
发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则